Skip to content

Instantly share code, notes, and snippets.

@jblang
Last active February 1, 2022 06:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jblang/e232ad83326a392e44d7439a59b0be0d to your computer and use it in GitHub Desktop.
Save jblang/e232ad83326a392e44d7439a59b0be0d to your computer and use it in GitHub Desktop.
AppleSoft Advanced Graphics Techniques
1 REM Advanced Graphics Techniques--Part II by Bob Boothe
2 REM 80 Microcomputing Magazine, May 1981, Page 119-142
3 REM https://archive.org/details/80-microcomputing-magazine-1981-05/page/n121/mode/2up
4 REM Converted to AppleSoft by J.B. Langston, January 2022
10 HOME : HGR : HCOLOR= 3: POKE 49234,0
20 PI = 3.14:XC = 139:YC = 95:SC = YC
30 R1 = SC:R2 = SC:V = 18: GOSUB 100: GOSUB 2000
40 GOSUB 200: GOSUB 300: GOSUB 400: GOSUB 500: GOSUB 600
50 SD = 76:TD = 3:TM = 2: GOSUB 700
60 SD = 60:TD = 2:TM = 2: GOSUB 700
70 SD = 60:TD = 4:TM = 4: GOSUB 700
80 GOSUB 800: GOSUB 900
90 TEXT : END
100 REM Figure 1: Regular polygon
110 FOR T1 = 0 TO 2 * PI - .001 STEP 2 * PI / V
120 FOR T2 = T1 + 2 * PI / V TO 2 * PI - .001 STEP 2 * PI / V
130 GOSUB 1000
140 NEXT : NEXT
150 RETURN
200 REM Figure 2: "The Eye"
210 SZ = 189:XO = XC - SZ / 2:YO = YC - SZ / 2
220 FOR Q = 0 TO SZ STEP 9
230 HPLOT XO,YO + Q TO XO + Q,YO + SZ
240 HPLOT XO + Q,YO TO XO + SZ,YO + Q
250 NEXT
260 V = 11:R1 = SC - 35:R2 = R1: GOSUB 100
270 GOTO 2000
300 REM Figure 3: Moire pattern
305 R1 = SC / 2:R2 = SC * 2:XO = XC - R2 / 2:YO = YC - R2 / 2
310 FOR T = 0 TO PI / 2 STEP PI / 180
320 X1 = INT ( COS (T) * R1):Y1 = SIN (T) * R1
330 X2 = INT ( COS (T) * R2):Y2 = SIN (T) * R2
340 HPLOT XO + X1,YO + Y1 TO XO + X2,YO + Y2
350 HPLOT XO + R2 - X1,YO + R2 - Y1 TO XO + R2 - X2,YO + R2 - Y2
360 NEXT
370 GOTO 2000
400 REM Figure 4: "The Tunnel"
410 SZ = SC * 1.14:X1 = XC * 1.08:Y1 = YC * 1.15
420 FOR Q = 1 TO 36
430 X2 = X1 + 5 * Q + 2:Y2 = Y1: HPLOT X1,Y1 TO X2,Y2
440 X1 = X2:Y1 = Y2 + 5 * Q + 3: HPLOT X1,Y1 TO X2,Y2
450 X2 = X1 - 5 * Q - 5:Y2 = Y1: HPLOT X1,Y1 TO X2,Y2
460 X1 = X2:Y1 = Y2 - 5 * Q - 6: HPLOT X1,Y1 TO X2,Y2
470 NEXT
480 GOTO 2000
500 REM Figure 5: Simple disk
510 R1 = SC:R2 = SC
520 FOR T1 = 0 TO 2 * PI STEP PI / 50
530 T2 = T1 + 3 * PI / 4: GOSUB 1000
540 NEXT
550 GOTO 2000
600 REM Figure 6: Overlapping spiral
610 FOR T1 = 0 TO 10 * PI STEP PI / 20
620 R1 = 2.9 * T1:T2 = T1 + 2 * PI / 3:R2 = 2.9 * T2: GOSUB 1000
630 NEXT
640 GOTO 2000
700 REM Figures 7-9: Four leaf rose, squares, eight leaf rose
710 FOR T1 = 0 TO 2 * PI STEP PI / SD
720 R1 = COS (TM * T1) * SC:T2 = T1 + PI / TD:R2 = COS (TM * T2) * SC: GOSUB 1000
730 NEXT
740 GOTO 2000
800 REM Figure 10: Triangle spiral
810 FOR T = 0 TO 2 * PI STEP PI / 30
820 T1 = T:R1 = T * 15:T2 = T + 2 * PI / 3:R2 = R1: GOSUB 1000
830 T1 = T + 4 * PI / 3: GOSUB 1000
840 T2 = T: GOSUB 1000
850 NEXT
860 GOTO 2000
900 REM Figure 11: Scaled triangle spiral
910 R1 = 1
920 FOR T = 0 TO 3.24 STEP PI / 30
930 T1 = T:R1 = R1 * 1.16:T2 = T + 2 * PI / 3:R2 = R1: GOSUB 1000
940 T1 = T + 4 * PI / 3: GOSUB 1000
950 T2 = T: GOSUB 1000
960 NEXT
970 GOTO 2000
1000 REM Plot a line between polar coords (T1,R1) and (T2,R2)
1010 X1 = INT ( COS (T1) * R1 + XC):Y1 = INT ( SIN (T1) * R1 + YC)
1020 X2 = INT ( COS (T2) * R2 + XC):Y2 = INT ( SIN (T2) * R2 + YC)
1030 IF X1 > 279 OR X2 > 279 THEN RETURN
1040 IF Y1 > 191 OR Y2 > 191 THEN RETURN
1050 IF X1 < 0 OR X2 < 0 THEN RETURN
1060 IF Y1 < 0 OR Y2 < 0 THEN RETURN
1070 HPLOT X1,Y1 TO X2,Y2
1080 RETURN
2000 K = PEEK (49152) - 128
2010 IF K < 0 THEN 2000
2020 POKE 49168,0: HGR : POKE 49234,0
2030 RETURN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment