5 REM Mark Lawler Fixed Program - SPHERE.BAS 7 REM Ported from original on WWW.GLENSSTUFF.COM 8 REM With code from Tom Lake's TLHAT1.BAS VT100 fix 10 GOSUB 300: PRINT CLS$+ESC$+"[?9l"+ESC$+"[?25l"; ' 36 LINES PER SCREEN, CURSOR OFF 15 X1=124: Y1=131: X2=138: Y2=145 20 L1=200: X0=320/1.2: Y0=240: ST=0: PI=3.14159 30 GOTO 600 100 REM - ORTHOGRAPHIC TRANSFORMATION 110 ZT=X*SIN(YR)+Z*COS(YR): XT=X*COS(YR)-Z*SIN(YR) 120 YT=Y*SIN(XR)-ZT*COS(XR): RETURN 200 REM -PLOT TO VT100 SCREEN 210 PRINT FNPSET$(XS+X0,YS+Y0); 220 PRINT FNLN$(XS+X0,YS+Y0,XT+X0,YT+Y0); 230 RETURN 300 ' ARCHIMEDES SPIRAL PORT TO ALTAIR WITH ASCII VIDEO TERMINAL VER 1.3 BY JOHN GALT 2022 310 ' SETUP TERMINAL DRAW FUNCTIONS FOR ALTAIR PRO 8800 TERMINAL 320 F1$="[Z1;": F2$=";": F3$="Z": F4$="[": F5$="H": F6$="[H": F7$="[2J": F8$="[Z6;" 330 ESC$=CHR$(27) 'ESC CHARACTER 340 HOME$=ESC$+F6$ 'HOME THE CURSOR UPPER LEFT 350 CLS$=ESC$+F7$ 'CLEAR SREEN 360 DEF FNTRIM$(X)=MID$(STR$(INT(X)),2) 370 DEF FNPAT$(X,Y)=HOME$+ESC$+F4$+FNTRIM$(X)+F2$+FNTRIM$(432-Y)+F5$ 'LOCATE TEXT ON TERMINAL AT ROW,COL 380 DEF FNPSET$(X,Y)=HOME$+ESC$+F1$+FNTRIM$(X)+F2$+FNTRIM$(432-Y)+F2$+FNTRIM$(X)+F2$+FNTRIM$(432-Y)+F3$ 'PSET(X,Y) ON 390 DEF FNPRESET$(X,Y)=HOME$+ESC$+F8$+FNTRIM$(X)+F2$+FNTRIM$(432-Y)+F2$+FNTRIM$(X)+F2$+FNTRIM$(432-Y)+F3$ 'PSET(X,Y) OFF 400 DEF FNLN$(X1,Y1,X2,Y2)=HOME$+ESC$+F1$+FNTRIM$(X1)+F2$+FNTRIM$(432-Y1)+F2$+FNTRIM$(X2)+F2$+FNTRIM$(432-Y2)+F3$ 'LINE(X1,Y1,X2,Y2) 'LINE ON 410 DEF FNLO$(X1,Y1,X2,Y2)=HOME$+ESC$+F8$+FNTRIM$(X1)+F2$+FNTRIM$(432-Y1)+F2$+FNTRIM$(X2)+F2$+FNTRIM$(432-Y2)+F3$ 'LINE(X1,Y1,X2,Y2) 'LINE OFF 420 RETURN 600 REM -INPUT DATA 605 GOSUB 300 610 PRINT CLS$;: INPUT "ENTER DIAMETER OF SPHERE";DIA 620 INPUT "ENTER NUMBER OF SEGMENTS";SEG 630 INPUT "ENTER X-AXIS ROTATION IN DEGREES";XR 640 INPUT "ENTER Y-AXIS ROTATION IN DEGREES";YR 650 RAD=DIA/2: SEG=2*PI/SEG: XR=XR*(PI/180): YR=YR*(PI/180) 660 PRINT CLS$; 700 REM -COMPUTE SPHERE 710 FOR R1=0 TO PI STEP SEG: W=SIN(R1)*RAD: Z=COS(R1)*RAD 720 FOR R2=0 TO 2*PI STEP SEG: X=SIN(R2)*W: Y=COS(R2)*W 730 IF ST=0 THEN GOSUB 110: XS=XT: YS=YT: ST=1 740 GOSUB 110: GOSUB 210: XS=XT: YS=YT: NEXT R2 750 X=0: Y=W: GOSUB 110: GOSUB 210: ST=0: NEXT R1 760 FOR R2=0 TO 2*PI STEP SEG: FOR R1=0 TO PI STEP SEG 770 W=SIN(R1)*RAD: Z=COS(R1)*RAD 780 X=SIN(R2)*W: Y=COS(R2)*W 790 IF ST=0 THEN GOSUB 110: XS=XT: YS=YT: ST=1 800 GOSUB 110: GOSUB 210: XS=XT: YS=YT: NEXT R1 810 X=0: Z=-RAD: Y=0: GOSUB 110: GOSUB 210: ST=0: NEXT R2 900 PRINT ESC$+"[?25h":STOP 'CURSOR ON AND STOP PROGRAM