1 'CLUB 100 LIBRARY - 415/939-1246 BBS, 937-5039 NEWSLETTER, 932-8856 VOICE 2 'Karl Koessel 3 'Perspective Image of Rotated Globe 4 'Taken from Vol.1 No. 1 issue of 5 'PC WORLD 6 'Rewritten for Model 100 by S. Sande 20 CLS:KEY OFF 30 PRINT " 40 DEFINT L,R,X-Z 50 CX=CY:CZ=SX:SY=SZ:I=J:R=A:B=C:A1=B2:C1=C2 60 A3=B3:X=Y:XC=YC:LX=LY:B$=C$:RC=PI:LZ=ZS:Q=DR 70 DIM RC(11) 80 FOR X=1 TO 11 90 RC(X)=(X-1) MOD 3+1 100 IF X>6 THEN RC(X)=(5-RC(X)) MOD 3+1 110 NEXT 120 PI=3.14159265# 130 CF=PI/180# 140 PRINT 150 INPUT "Want to see a sample run (Y/N)";S$ 160 S$=LEFT$(S$,1) 170 IF S$="y" OR S$="Y" THEN GOSUB 880:GOTO 380 180 PRINT 190 PRINT "Enter screen location of center of" 200 INPUT "globe (e.g. 120,32)";XC,YC 210 PRINT 220 PRINT "Enter relative coordinate of observer:"; 230 PRINT "Points left(-)/right(+) of X, below(-)/"; 240 PRINT "above(+) Y, and distance from the screen"; 250 INPUT "(example : 5,5,50)";XOBS,YOBS,ZOBS 260 PRINT 270 PRINT "Enter parallel, meridian, & image's tilt" 280 INPUT "(example : 0,0,0)";XROT,YROT,ZROT 290 PRINT 300 PRINT "Enter sphere's radius" 310 INPUT "(example : 25)";R 320 PRINT 350 PRINT 360 PRINT "Enter this screen's aspect ratio" 370 INPUT "(example : 1.0)";ASP 380 CX=COS(CF*XROT+ATN(YOBS/ZOBS)):SX=SIN(CF*XROT+ATN(YOBS/ZOBS)) 390 CY=COS(CF*YROT+ATN(XOBS/ZOBS)):SY=SIN(CF*YROT+ATN(XOBS/ZOBS)) 400 CZ=COS(CF*ZROT):SZ=SIN(CF*ZROT) 410 ZOBS=SQR(XOBS^2+YOBS^2+ZOBS^2) 420 ZS=R^2/ZOBS 430 CLS 440 FOR I=0 TO 3 STEP PI/12 450 RC=(I*12/PI+2) MOD 3+1 460 C$=STR$(RC) 470 FOR J=0 TO 2.0001*PI STEP PI/24 480 A=R*SIN(I)*SIN(J) 490 B=R*COS(J) 500 C=R*COS(I)*SIN(J) 510 GOSUB 710 520 GOSUB 810 530 NEXT 540 NEXT 550 FOR I=PI/12 TO 11*PI/12 STEP PI/12 560 RC=RC(I*12/PI) 570 C$=STR$(RC) 580 FOR J=0 TO 2.0001*PI STEP PI/24 590 A=R*SIN(I)*SIN(J) 600 B=R*COS(I) 610 C=R*SIN(I)*COS(J) 620 GOSUB 710 630 GOSUB 810 640 NEXT 650 NEXT 700 GOSUB 1160:GOTO 1190 710 A1=A*CY-C*SY 720 C1=A*SY+C*CY 730 B2=B*CX-C1*SX 740 C2=B*SX+C1*CX 750 A3=A1*CZ-B2*SZ 760 B3=A1*SZ+B2*CZ 770 DR=C2/(ZOBS-C2)+1 780 X=INT(A3*DR*ASP+XC) 790 Y=INT(B3*-DR+YC) 800 RETURN 810 IF C2319)+(Y<0)+(Y>199)+(LX<0)+(LX>319)+(LY<0)+(LY>199) 830 IF Q+(J=0) THEN B$="BC" ELSE B$="C" 840 LX=X:LY=Y 850 LZ=C2 860 PSET(X,Y) 870 RETURN 880 XC=120:YC=32 890 XOBS=5:YOBS=5:ZOBS=50 900 XROT=0:YROT=0:ZROT=45 910 R=25 930 ASP=1.0 940 PRINT@201," " 950 PRINT "Enter screen location of center of globe" 960 PRINT "(e.g. 120,32)";XC","YC 970 PRINT 980 PRINT "Enter relative coordinate of observer:"; 990 PRINT "points left(-)/right(+) of X, below(-)/"; 1000 PRINT "above(+) Y, and distance from the screen" 1010 PRINT "(e.g. 5,5,50)";XOBS","YOBS","ZOBS 1020 PRINT 1030 PRINT "Enter parallel, meridian, & image's tilt" 1040 PRINT "(e.g. 0,0,45)";XROT","YROT","ZROT 1050 PRINT 1060 PRINT "Enter sphere's radius" 1070 PRINT "(e.g. 25)";R 1080 PRINT 1110 PRINT 1120 PRINT "Enter this screen's aspect ratio" 1130 PRINT "(e.g. 1.0)";ASP 1140 PRINT@281,"" 1150 PRINT"HIT ANY KEY TO CONTINUE"; 1160 IF INKEY$>"" THEN 1160 1170 IF INKEY$="" THEN 1170 1180 RETURN 1190 KEY ON 1200 END