home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / graphics / vectors.amos / vectors.amosSourceCode < prev   
AMOS Source Code  |  1991-02-14  |  4KB  |  164 lines

  1. Screen Open 0,320,200,2,Lowres : Flash Off : Curs Off : Hide On : Cls 0
  2. Music 1 : Palette 0,$FFC
  3. NUMPOINTS=8 : NUMLINES=12
  4. Gosub STRIPES
  5. Dim X#(14),Y#(14),Z#(14),XX(14),YY(14)
  6. Dim F1(16),F2(16)
  7. '
  8. 'set Degree mode and precalculate values for sin and cos of
  9. ' rotation angle ( 2 degrees)
  10. '
  11. Degree : CS#=Cos(2)*1.0006 : SN#=Sin(2)*1.0006
  12. '
  13. '
  14. ' D = Vanishing point on Z Axis
  15. '
  16. ' Try changing D. The Lower the value, the closer the observer is to the 
  17. ' object.
  18. D=6
  19. ' Set for manual screen swapping 
  20. Double Buffer : Autoback 0
  21. Restore CDAT
  22.  For A=1 To NUMPOINTS
  23.   Read X#(A),Y#(A),Z#(A)
  24.  Next 
  25. '
  26.  For A=1 To NUMLINES
  27.   Read F1(A),F2(A)
  28.  Next 
  29. '
  30. '
  31. ' Data for ponts in 3D space (X,Y,Z) 
  32. ' must range from -1 to +1 
  33. '
  34. '
  35. CDAT:
  36. Data -1,-1,-1,1,-1,-1,1,1,-1,-1,1,-1
  37. Data -1,-1,1,1,-1,1,1,1,1,-1,1,1
  38. '
  39. '
  40. ' Data for connecting lines. 
  41. '
  42. ' ie pt.1 connected to pt. 2 
  43. '    pt.2 connected to pt. 3 etc.
  44. Data 1,2,2,3,3,4,4,1,5,6,6,7,7,8,8,5,1,5,2,6,3,7,4,8
  45. '
  46. 'ROTATIONS 
  47. '========= 
  48. 'The simple routine below rotates around 2 of 3 axes at once.
  49. 'The formulae for rotation are simple.  See ROTX,ROTY,ROTZ 
  50. 'to see how its done.
  51. '
  52. Repeat 
  53. ROT:
  54. Add R,1,1 To 100
  55. For A=1 To 14
  56. If R<33
  57.  Gosub ROTX
  58.  Gosub ROTY
  59.  Else If R>=33 and R<=66
  60.   Gosub ROTZ : 
  61.   Gosub ROTY
  62.  Else 
  63.  Gosub ROTX : 
  64.  Gosub ROTZ
  65. End If 
  66. End If 
  67. Next A
  68. '
  69. 'DISPLAY CUBE
  70. '
  71. DISP:
  72. A=1
  73. While A<(NUMPOINTS+1)
  74. 'convert Z factor of a point into x and y coords 
  75. XX(A)=((X#(A)*D)/(Z#(A)+D))*50
  76. YY(A)=((Y#(A)*D)/(Z#(A)+D))*50
  77. ' translation to middle of screen. 
  78. XX(A)=XX(A)+160
  79. YY(A)=YY(A)+100
  80. Inc A
  81. Wend 
  82. '
  83. ' Clear screen now.
  84. Cls 0
  85. A=1
  86. '
  87. ' draw lines 
  88. '
  89. While A<(NUMLINES+1)
  90. Draw XX(F1(A)),YY(F1(A)) To XX(F2(A)),YY(F2(A))
  91. Inc A
  92. Wend 
  93. '
  94. '
  95. Screen Copy Logic To Physic : Wait Vbl 
  96. '
  97. Until Mouse Key
  98. Music Off : End 
  99. '
  100. '
  101. ' Rotation Subroutines 
  102. '
  103. '
  104. ROTZ:
  105. X#(A)=X#(A)*CS#-Y#(A)*SN#
  106. Y#(A)=Y#(A)*CS#+X#(A)*SN#
  107. Return 
  108. '
  109. ROTY:
  110. X#(A)=X#(A)*CS#-Z#(A)*SN#
  111. Z#(A)=Z#(A)*CS#+X#(A)*SN#
  112. Return 
  113. '
  114. ROTX:
  115. Y#(A)=Y#(A)*CS#-Z#(A)*SN#
  116. Z#(A)=Z#(A)*CS#+Y#(A)*SN#
  117. Return 
  118. '
  119. STRIPES:
  120. Set Rainbow 0,1,280,"","",""
  121. Rainbow 0,0,0,280
  122. Colour Back 0
  123. Restore RDATA
  124. For C=0 To 279 : Read CVA : Rain(0,C)=CVA
  125. Next C : View 
  126. Return 
  127. RDATA:
  128. Data $0,$0,$0,$111,$222,$333,$444,$555
  129. Data $666,$777,$888,$999,$AAA,$BBB,$CCC,$DDD
  130. Data $EEE,$FFF,$FFF,$EEE,$DDD,$CCC,$BBB,$AAA
  131. Data $999,$888,$777,$666,$555,$444,$333,$222
  132. Data $300,$200,$300,$400,$500,$600,$700,$800
  133. Data $900,$A00,$B00,$C00,$D00,$E00,$F00,$F00
  134. Data $E00,$D00,$C00,$B00,$A00,$900,$800,$700
  135. Data $600,$500,$400,$300,$200,$20,$30,$40
  136. Data $50,$60,$70,$80,$90,$A0,$B0,$C0
  137. Data $D0,$E0,$F0,$F0,$E0,$D0,$C0,$B0
  138. Data $A0,$90,$80,$70,$60,$50,$40,$30
  139. Data $30,$0,$1,$2,$3,$4,$5,$6
  140. Data $7,$8,$9,$A,$B,$C,$D,$E
  141. Data $F,$F,$E,$D,$C,$B,$A,$9
  142. Data $8,$7,$6,$5,$4,$3,$2,$1
  143. Data $0,$0,$22,$33,$44,$55,$66,$77
  144. Data $88,$99,$AA,$BB,$CC,$DD,$EE,$FF
  145. Data $FF,$EE,$DD,$CC,$BB,$AA,$99,$88
  146. Data $77,$66,$55,$44,$33,$22,$110,$220
  147. Data $330,$440,$550,$660,$770,$880,$990,$AA0
  148. Data $BB0,$CC0,$DD0,$EE0,$FF0,$FF0,$EE0,$DD0
  149. Data $CC0,$BB0,$AA0,$990,$880,$770,$660,$550
  150. Data $440,$330,$220,$101,$202,$303,$404,$505
  151. Data $606,$707,$808,$909,$A0A,$B0B,$C0C,$D0D
  152. Data $E0E,$F0F,$F0F,$E0E,$D0D,$C0C,$B0B,$A0A
  153. Data $909,$808,$707,$606,$505,$404,$303,$202
  154. Data $111,$222,$333,$444,$555,$666,$777,$888
  155. Data $999,$AAA,$BBB,$CCC,$DDD,$EEE,$FFF,$FFF
  156. Data $EEE,$DDD,$CCC,$BBB,$AAA,$999,$888,$777
  157. Data $666,$555,$444,$333,$222,$300,$200,$300
  158. Data $400,$500,$600,$700,$800,$900,$A00,$B00
  159. Data $C00,$D00,$E00,$F00,$F00,$E00,$D00,$C00
  160. Data $B00,$A00,$900,$800,$700,$600,$500,$400
  161. Data $300,$200,$20,$30,$40,$50,$60,$70
  162. Data $80,$90,$A0,$B0,$C0,$D0,$E0,$F0
  163. Data $F0,$0,$0,$0,$0,$0,$0,$0
  164. Rem