home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 601-625 / apd620 / amos_pro_only / vector.amos / vector.amosSourceCode
AMOS Source Code  |  1986-08-03  |  2KB  |  97 lines

  1. While Screen<>-1
  2.    Screen Close Screen
  3. Wend 
  4. '  
  5. Screen Open 0,320,256,2,Lowres
  6. Curs Off 
  7. Flash Off 
  8. Hide On 
  9. Palette $0,$FFF
  10. NUM_PTS=8
  11. NUM_LINES=12
  12. Dim X(NUM_PTS),Y(NUM_PTS),Z(NUM_PTS)
  13. Dim XP(NUM_PTS),YP(NUM_PTS)
  14. Dim LINEA(NUM_LINES),LINEB(NUM_LINES)
  15. Global NUM_PTS,NUM_LINES,DIST#,XCEN,YCEN
  16. Global X(),Y(),Z(),XP(),YP(),LINEA(),LINEB()
  17. _INITIALIZE
  18. Cls 0
  19. Double Buffer 
  20. Autoback 0
  21. TRANX=0 : TRANY=0 : TRANZ=0
  22. ROTX=0 : ROTY=0 : ROTZ=0
  23. XSCALE#=1
  24. YSCALE#=1
  25. ZSCALE#=1
  26. Repeat 
  27.    Add ROTZ,4,0 To 359
  28.    Add ROTY,4,0 To 359
  29.    Add ROTZ,4,0 To 359
  30.    _CALC_IMAGE[ROTX,ROTY,ROTZ,TRANX,TRANY,TRANZ,XSCALE#,YSCALE#,ZSCALE#]
  31.    _DRAW_IMAGE[XCEN,YCEN]
  32.    Screen Swap 
  33.    Wait Vbl 
  34.    Cls 0
  35. Until Mouse Key
  36. End 
  37. Procedure _DRAW_IMAGE[X,Y]
  38.    For LINE=1 To NUM_LINES
  39.       PNT1=LINEA(LINE)
  40.       PNT2=LINEB(LINE)
  41.       Draw XP(PNT1)+X,YP(PNT1)+Y To XP(PNT2)+X,YP(PNT2)+Y
  42.    Next LINE
  43. End Proc
  44. Procedure _CALC_IMAGE[ROTX,ROTY,ROTZ,TRANX,TRANY,TRANZ,XSCALE#,YSCALE#,ZSCALE#]
  45.    CX#=Cos(ROTX) : SX#=Sin(ROTX)
  46.    CY#=Cos(ROTY) : SY#=Sin(ROTY)
  47.    CZ#=Cos(ROTZ) : SZ#=Sin(ROTZ)
  48.    For PNT=1 To NUM_PTS
  49.       X=X(PNT)*XSCALE#
  50.       Y=Y(PNT)*YSCALE#
  51.       Z=Z(PNT)*ZSCALE#
  52.       X1#=X*CZ#-Y*SZ#
  53.       Y1#=X*SZ#+Y*CZ#
  54.       Z1#=Z
  55.       X2#=X1#*CY#-Z1#*SY#
  56.       Y2#=Y1#
  57.       Z2#=X1#*SY#+Z1#*CY#
  58.       X3#=X2#
  59.       Y3#=Y2#*CX#+Z2#*SX#
  60.       Z3#=Z2#*CX#-Y2#*SX#
  61.       X4#=X3#+TRANX
  62.       Y4#=Y3#-TRANY
  63.       Z4#=Z3#-TRANZ
  64.       DD#=Z4#+DIST#
  65.       If DD#=0 Then DD#=1
  66.       X#=X4#*(DIST#/DD#)
  67.       Y#=Y4#*(DIST#/DD#)
  68.       XP(PNT)=X#
  69.       YP(PNT)=Y#
  70.    Next PNT
  71. End Proc
  72. Procedure _INITIALIZE
  73.    For I=1 To NUM_PTS
  74.       Read X(I),Y(I),Z(I)
  75.    Next I
  76.    For I=1 To NUM_LINES
  77.       Read LINEA(I),LINEB(I)
  78.    Next I
  79.    XCEN=160
  80.    YCEN=100
  81.    DIST#=250
  82.    Degree 
  83.    Data -20,-20,-20
  84.    Data 20,-20,-20
  85.    Data 20,20,-20
  86.    Data -20,20,-20
  87.    Data -20,-20,20
  88.    Data 20,-20,20
  89.    Data 20,20,20
  90.    Data -20,20,20
  91.    Data 1,2,2,3
  92.    Data 3,4,4,1
  93.    Data 5,6,6,7
  94.    Data 7,8,8,5
  95.    Data 1,5,4,8
  96.    Data 3,7,2,6
  97. End Proc