Graphics with Math 3

Code produced by GEMINI AI after a not very long conversation, imported to Newbrain Emulator using the Tools–>Import from textfile feature, and Run with Newbrain Cpu at 16MHz (Tools–>Set Cpu Multiplier=5).

Original Code here

Hi Res option

This code let the user choose the graphics resolution

10 REM MATHEMATICAL HAT FOR NEWBRAIN
20 REM ADAPTED FROM PYTHON VERSION OF COMPUTE! MAR 1981 CODE
30 REM NEWBRAIN HAS (0,0) AT BOTTOM-LEFT SO NO Y FLIP NEEDED

40 REM --- GRAPHICS MODE SELECTION ---
50 PRINT "1 FOR LOW RES, 2 FOR HI RES":INPUT MO : REM SET TO 1 FOR 320x220 (LOW-RES), 2 FOR 640x220 (HIGH-RES)

60 REM --- GRAPHICS SETUP ---
70 CLOSE#1
80 IF MO = 1 THEN OPEN#0,4,"190" : REM Low-res memory
90 IF MO = 2 THEN OPEN#0,4,"L190" : REM High-res  memory

100 OPEN#1,11,"220" : REM Open graphics screen for 220 visible lines
110 IF MO = 1 THEN PLOT RANGE(320,220) : REM Low-res logical coordinates
120 IF MO = 2 THEN PLOT RANGE(640,220) : REM High-res logical coordinates
130 PLOT COLOUR(1) : REM Set drawing color to foreground

140 REM --- PROGRAM CONSTANTS ---
150 XP = 144 : XR = 1.5*PI
160 YP = 56 : YR = 1 : ZP = 64

170 XF = XR/XP : YF = YP/YR : ZF = XR/ZP

180 REM --- RESOLUTION-DEPENDENT SCALING ---
190 IF MO = 1 THEN P = 160 : Q = 110 : SC = 1 : REM For 320x220: P=scrX/2, Q=scrY/2 (220/2=110), SCaling factor is 1
200 IF MO = 2 THEN P = 320 : Q = 110 : SC = 2 : REM For 640x220: P=scrX/2, Q=scrY/2 (220/2=110), SCaling factor is 2 (X is doubled)

210 REM --- MAIN PLOTTING LOOPS ---
220 FOR ZI = -Q TO Q : REM Outer loop for Z-axis (depth/height slices)
230     REM Check ZI bounds (Python line 70 equivalent)
240     IF ZI < -ZP THEN GOTO 370 : REM Skip if ZI is below -ZP
250     IF ZI > ZP THEN GOTO 370 : REM Skip if ZI is above ZP

260     ZT = ZI*XP/ZP : ZZ = ZI
270     XL = INT(0.5 + SQR(ABS(XP*XP - ZT*ZT)))

280     FT = 1

290     FOR XI = -XL TO XL : REM Inner loop for XI
300         GOSUB 390 : REM Call subroutine to calculate and plot point
310         XI = XI + 1 : REM Increment XI by 1
320     NEXT XI

330 REM End of ZI block
340 ZI = ZI + 1 : REM Increment ZI by 1
350 GOTO 380

360 REM ZI loop continuation (if previous IFs were true)
370 ZI = ZI + 1 : REM Increment ZI and continue outer loop if skipped
380 NEXT ZI : REM This line handles the loop continuation if GOTO 360 was taken
385 END : REM Prog ENDs

390 REM --- SUBROUTINE TO CALCULATE AND PLOT POINT ---
400 XT = SQR(XI*XI + ZT*ZT) * XF : XX = XI
410 YY = (SIN(XT) + 0.4*SIN(3*XT)) * YF

420 X1 = XX*SC + ZZ*SC + P : REM Project X to screen coordinates, apply SCaling factor
430 Y1 = YY - ZZ + Q + 10 : REM Project Y, NO Y FLIP. Added +10 to shift upward.

440 REM NO BOUNDS CHECK HERE AS REQUESTED
450 IF FT = 1 THEN PLOT PLA(X1,Y1) : FT = 0 : RETURN
460 PLOT MVE(X1,Y1)
470 RETURN

Leave a Reply