home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Share Gallery 1
/
share_gal_1.zip
/
share_gal_1
/
UT
/
UT102.ZIP
/
CUBE.BAS
< prev
next >
Wrap
BASIC Source File
|
1987-02-21
|
3KB
|
99 lines
2 'iF YOU WANT TO STOP THE PROGRAM:
5 'Don't be surprised if you see no keyboard response on your screen.
7 'TYPE IN ctrl-Break AND "GOTO 9999" WILL BRING YOU BACK TO SCREEN.(9-27-84)
10 SCREEN 2
20 KEY OFF
30 OUT &H3D9,2
50 VERTICES=22
60 EDGES=22
100 DIM VW(VERTICES,3),VS(VERTICES,2),SEG(EDGES,2)
150 VSX=320 : VCX=VSX
160 VSY=100 : VCY=VSY
165 NOBYTE=VSX*2/8
170 RX=9 : RY =4
200 FOR I=1 TO VERTICES
220 FOR J=1 TO 3
230 READ VW(I,J)
240 NEXT J
250 NEXT I
260 FOR I=1 TO EDGES
270 FOR J=1 TO 2
280 READ SEG(I,J)
290 NEXT J
300 NEXT I
310 PI=3.141593
312 THETA = PI/180
315 GOTO 3500 'menu
320 ' ==== rotate
330 WINDOW0=1
338 OUT &H3D8,&H1A
340 FOR T=1 TO 720 STEP 10
350 XV=5*SIN(T*THETA)
360 YV=5*COS(T*THETA)
370 ZV=6
382 'SHOWING WINDOW 0, WHILE DRAWING WINDOW 1
392 OUT &H3DD,&H80
400 'CLS
410 GOSUB 2000 ' cube0
420 OUT &H3D8,&H9A
500 ' ==== window3
510 'SHOWING WINDOW 1, WHILE DRAWING WINDOW 0
516 OUT &H3DD,&H0
520 'CLS
530 GOSUB 2000 'cube0
540 OUT &H3D8,&H1A
600 ' ==== lp98:
620 NEXT T
630 GOTO 320
1000 OUT &H3D8,&H1A
2000 ' ==== cube0:
2010 R12= XV*XV+YV*YV
2020 R1=SQR(R12)
2030 R2=SQR(R12+ZV*ZV)
2040 COST=-YV/R1: SINT=XV/R1
2050 COSP=R1/R2 : SINP=-ZV/R2
2060 RX=4 : RY=4 ' window size
2070 FOR K=1 TO VERTICES
2080 XC= RX*(VW(K,1)*COST + VW(K,2)*SINT)
2090 YC= RY*(VW(K,1)*SINT*SINP-VW(K,2)*COST*SINP+VW(K,3)*COSP)
2100 ZC = -VW(K,1)*SINT*COSP+VW(K,2)*COST*COSP+VW(K,3)*SINP+R2
2110 VS(K,1)=INT(XC*VSX/ZC)+VCX
2120 VS(K,2)=-INT(YC*VSY/ZC)+VCY
2130 NEXT K
2135 CLS
2140 FOR K=1 TO EDGES
2150 X1=VS(SEG(K,1),1)
2160 Y1=VS(SEG(K,1),2)
2170 X2=VS(SEG(K,2),1)
2180 Y2=VS(SEG(K,2),2)
2190 GOSUB 3000 ' lined0
2200 NEXT K
2205 'PAINT (VCX,VCY),1,1
2210 RETURN
3000 ' ==== lined0:
3100 LINE (X1,Y1)-(X2,Y2)
3110 RETURN
3500 ' ==== menu:
3510 PRINT " 0) exit 1) draw cube"
3520 PRINT " 2) rotate cube"
3530 INPUT " what do you want ? "; ANS
3540 ON ANS GOSUB 3600, 320
3550 IF ANS = 0 THEN STOP ELSE GOTO 3500
3600 ' ==== cube:
3610 INPUT " View point xv = ";XV
3620 INPUT " yv = ";YV
3630 INPUT " zv = ";ZV
3640 GOTO 2000
4000 STOP
5000 DATA -1,1,-1,1,1,-1,1,-1,-1,-1,-1,-1
5010 DATA 1,1,1,-1,1,1,-1,-1,1,1,-1,1
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
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
5016 DATA 1,0.6,-0.8,1,-0.2,-0.85
5020 DATA 1,2,2,3,3,4,1,4,5,6
5030 DATA 5,8,7,8,6,7,1,6,2,5,3,8,4,7
5032 DATA 9,10,11,15,11,12,12,16,13,14,15,16,17,18,19,20,19,21
5034 DATA 18,22
9999 OUT &H3D8,&H1A
10000 OUT &H3DD,0