home *** CD-ROM | disk | FTP | other *** search
/ Share Gallery 1 / share_gal_1.zip / share_gal_1 / UT / UT102.ZIP / CUBE.BAS < prev    next >
BASIC Source File  |  1987-02-21  |  3KB  |  99 lines

  1. 2 'iF YOU WANT TO STOP THE PROGRAM:
  2. 5 'Don't be surprised if you see no keyboard response on your screen.
  3. 7 'TYPE IN ctrl-Break AND "GOTO 9999" WILL BRING YOU BACK TO SCREEN.(9-27-84)
  4. 10 SCREEN 2
  5. 20 KEY OFF
  6. 30 OUT &H3D9,2
  7. 50 VERTICES=22
  8. 60 EDGES=22
  9. 100 DIM VW(VERTICES,3),VS(VERTICES,2),SEG(EDGES,2)
  10. 150 VSX=320 : VCX=VSX
  11. 160 VSY=100 : VCY=VSY
  12. 165 NOBYTE=VSX*2/8
  13. 170 RX=9 : RY =4
  14. 200 FOR I=1 TO VERTICES
  15. 220 FOR J=1 TO 3
  16. 230 READ VW(I,J)
  17. 240 NEXT J
  18. 250 NEXT I
  19. 260 FOR I=1 TO EDGES
  20. 270 FOR J=1 TO 2
  21. 280 READ SEG(I,J)
  22. 290 NEXT J
  23. 300 NEXT I
  24. 310 PI=3.141593
  25. 312 THETA = PI/180
  26. 315 GOTO 3500 'menu
  27. 320 ' ==== rotate
  28. 330 WINDOW0=1
  29. 338 OUT &H3D8,&H1A
  30. 340 FOR T=1 TO 720 STEP 10
  31. 350 XV=5*SIN(T*THETA)
  32. 360 YV=5*COS(T*THETA)
  33. 370 ZV=6
  34. 382 'SHOWING WINDOW 0, WHILE DRAWING WINDOW 1
  35. 392 OUT &H3DD,&H80
  36. 400 'CLS
  37. 410 GOSUB 2000 ' cube0
  38. 420 OUT &H3D8,&H9A
  39. 500 ' ==== window3
  40. 510 'SHOWING WINDOW 1, WHILE DRAWING WINDOW 0
  41. 516 OUT &H3DD,&H0
  42. 520 'CLS
  43. 530 GOSUB 2000 'cube0
  44. 540 OUT &H3D8,&H1A
  45. 600 ' ==== lp98:
  46. 620 NEXT T
  47. 630 GOTO 320
  48. 1000 OUT &H3D8,&H1A
  49. 2000 ' ==== cube0:
  50. 2010 R12= XV*XV+YV*YV
  51. 2020 R1=SQR(R12)
  52. 2030 R2=SQR(R12+ZV*ZV)
  53. 2040 COST=-YV/R1: SINT=XV/R1
  54. 2050 COSP=R1/R2 : SINP=-ZV/R2
  55. 2060 RX=4 : RY=4 ' window size
  56. 2070 FOR K=1 TO VERTICES
  57. 2080 XC= RX*(VW(K,1)*COST + VW(K,2)*SINT)
  58. 2090 YC= RY*(VW(K,1)*SINT*SINP-VW(K,2)*COST*SINP+VW(K,3)*COSP)
  59. 2100 ZC = -VW(K,1)*SINT*COSP+VW(K,2)*COST*COSP+VW(K,3)*SINP+R2
  60. 2110 VS(K,1)=INT(XC*VSX/ZC)+VCX
  61. 2120 VS(K,2)=-INT(YC*VSY/ZC)+VCY
  62. 2130 NEXT K
  63. 2135 CLS
  64. 2140 FOR K=1 TO EDGES
  65. 2150 X1=VS(SEG(K,1),1)
  66. 2160 Y1=VS(SEG(K,1),2)
  67. 2170 X2=VS(SEG(K,2),1)
  68. 2180 Y2=VS(SEG(K,2),2)
  69. 2190 GOSUB 3000 ' lined0
  70. 2200 NEXT K
  71. 2205 'PAINT (VCX,VCY),1,1
  72. 2210 RETURN
  73. 3000 ' ==== lined0:
  74. 3100 LINE (X1,Y1)-(X2,Y2)
  75. 3110 RETURN
  76. 3500 ' ==== menu:
  77. 3510 PRINT " 0) exit            1) draw cube"
  78. 3520 PRINT " 2) rotate cube"
  79. 3530 INPUT " what do you want ? "; ANS
  80. 3540 ON ANS GOSUB 3600, 320
  81. 3550 IF ANS = 0 THEN STOP ELSE GOTO 3500
  82. 3600 ' ==== cube:
  83. 3610 INPUT " View point xv = ";XV
  84. 3620 INPUT "            yv = ";YV
  85. 3630 INPUT "            zv = ";ZV
  86. 3640 GOTO 2000
  87. 4000 STOP
  88. 5000 DATA -1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1
  89. 5010 DATA  1,1,1,-1,1,1,-1,-1,1,1,-1,1
  90. 5012 DATA 1,-0.8,0.6,1,0.8,0.6,1,-0.6,0.3,1,0.6,0.3,1,-0.5,0,1,0.5,0
  91. 5014 DATA 1,-0.4,-0.3,1,0.4,-0.3,1,0,0.9,1,0,-0.9,1,0,-0.5,1,-0.6,-0.8
  92. 5016 DATA 1,0.6,-0.8,1,-0.2,-0.85
  93. 5020 DATA 1,2,2,3,3,4,1,4,5,6
  94. 5030 DATA 5,8,7,8,6,7,1,6,2,5,3,8,4,7
  95. 5032 DATA 9,10,11,15,11,12,12,16,13,14,15,16,17,18,19,20,19,21
  96. 5034 DATA 18,22
  97. 9999 OUT &H3D8,&H1A
  98. 10000 OUT &H3DD,0
  99.