Created
July 17, 2021 11:32
-
-
Save fesh0r/76a4eb2c5f0263a7cb142fca82af6144 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
100 REM Program 3DPLOT Version 1A | |
110 REM Author Derek Chown | |
120 REM BEEBUG October 1983 | |
130 ON ERROR GOTO 150 | |
140 GOTO 190 | |
150 ON ERROR OFF | |
160 VDU3:MODE7:REPORT | |
170 PRINT" at line ";ERL:END | |
180 | |
190 MODE7 | |
191 PROCdbhd("3-D Plotter"," ") | |
200 PRINT':INPUT"Enter speed factor: "sf% | |
210 MODE4:VDU23;8202;0;0;0; | |
220 D%=500 | |
230 W%=1280 | |
240 C%=(W%+1)DIV2 | |
250 B%=(D%+1)DIV2 | |
260 CS=W%/32 | |
270 SN=D%/32 | |
280 FOR L1%=0 TO 16:REM DRAW GRID | |
290 GX%=CS*L1%+.5 | |
300 X%=CS*(16-L1%)+.5 | |
310 GY%=SN*L1%+.5 | |
320 Y%=SN*(16-L1%)+.5 | |
330 PLOT 4,C%+GX%-1,B%+Y% | |
340 PLOT 5,C%-X%,B%-GY% | |
350 PLOT 4,C%-GX%,B%+Y% | |
360 PLOT 5,C%+X%-1,B%-GY% | |
370 NEXT L1% | |
380 PRINTTAB(17,24)"Beebug"TAB(15,25)"User Group":VDU30 | |
390 TN=D%/W% | |
400 SN=ATN(TN) | |
410 CS=COS(SN) | |
420 SN=SIN(SN) | |
430 M%=C%*SQR(2)+.5 | |
440 FOR BT%=D% TO 0 STEP -4*sf%:REM MODES 0,1,2,4,5 | |
450 T=ABS(B%-BT%)/TN | |
460 L1%=T-3.5 | |
470 L2%=W%-T+3.5 | |
480 FOR CT%=L1% TO L2% STEP 4*sf%:REM MODES 1,4 | |
490 REM FOR CT%=L1% TO L2% STEP 8*sf%:REM MODES 2,5 | |
500 REM FOR CT%=L1% TO L2% STEP 2*sf%:REM MODE 0 | |
510 PROCXY(CT%,BT%):REM CONVERT PIXEL ADDRESS TO (X%,Y%) | |
520 PROCPT(X%,Y%):REM CALC Z% | |
530 GX%=(X%+4)DIV8 | |
540 GY%=(Y%+4)DIV8 | |
550 GCOL0,POINT(CT%,BT%)EOR1 | |
560 PLOT69,CT%,BT% | |
570 PLOT5,CT%,SY% | |
580 NEXT CT% | |
590 NEXT BT% | |
600 | |
610 REM Call screen dump here | |
620 | |
630 END | |
640 | |
650 DEFPROCPT(X%,Y%) | |
660 LOCAL P,R,S | |
670 | |
680 REM**************************** | |
690 | |
700 | |
710 REM RE-CODE THIS SECTION FOR ANY OTHER FUNCTIONS YOU CAN THINK OF | |
720 | |
730 REM HEMISPHERE | |
740 | |
750 R%=(X%-M%/2)^2+(Y%-M%/2)^2:S%=M%/2 | |
760 IF R%>=S%*S% S=0 ELSE S=SQR(M%*(X%+Y%)-S%*S%-X%*X%-Y%*Y%) | |
770 | |
780 | |
790 REM**************************** | |
800 | |
810 Z%=S+.5:REM THIS VALUE IS PLOTTED | |
820 P=.7854-ATN((Y%+1E-10)/(X%+1E-20)) | |
830 R=SQR(X%^2+Y%^2) | |
840 SX%=C%-R*SIN(P)+.5 | |
850 SY%=D%-R*COS(P)*SN+S*CS+.5 | |
860 ENDPROC | |
870 DEF PROCXY(SX%,SY%) | |
880 LOCAL P,R | |
890 P=TAN(.7854-ATN((C%-SX%)/(D%-SY%+1E-20)*SN)) | |
900 R=(C%-SX%)^2+((D%-SY%)/SN)^2 | |
910 R=SQR(R/(1+P^2)) | |
920 X%=R+.5 | |
930 Y%=P*R+.5 | |
940 ENDPROC | |
32000 DEFPROCdbhd(head$,Instr$) | |
32010 VDU22,7 | |
32020 FORpost%=1TO2:VDU31,(38-LEN(head$))/2,post%,141,129:PRINThead$:NEXT | |
32030 VDU31,0,4:PRINTInstr$ | |
32040 ENDPROC |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment