Skip to content

Instantly share code, notes, and snippets.

@fesh0r
Created July 17, 2021 11:32
Show Gist options
  • Save fesh0r/76a4eb2c5f0263a7cb142fca82af6144 to your computer and use it in GitHub Desktop.
Save fesh0r/76a4eb2c5f0263a7cb142fca82af6144 to your computer and use it in GitHub Desktop.
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