Skip to content

Instantly share code, notes, and snippets.

@meeuw
Created July 5, 2019 19:09
Show Gist options
  • Save meeuw/a5fc803075cc8bf7efaf2af45b1889ab to your computer and use it in GitHub Desktop.
Save meeuw/a5fc803075cc8bf7efaf2af45b1889ab to your computer and use it in GitHub Desktop.
REM *** Pythagoras tree ****
SCREEN 12: REM screen 12 voor VGA
CLS : pi = 4 * ATN(1)
WINDOW (-2.5, 2)-(5.5, 5)
INPUT "tolerantie (kan .1 zijn) =", eps: CLS
p = 32: DIM xa(p), ya(p), xb(p), yb(p), s(p)
REM *** initialiseren ****
h = pi / 3'prescribed angle
a1 = COS(h) * COS(h): b1 = SIN(h) * COS(h)
a2 = SIN(h) * SIN(h): b2 = -b1
xa = 0: ya = -1: xb = 0: yb = 0: g = 0: m = 0
LINE (0, 0)-(1, 0): LINE -(1, -1)
LINE -(0, -1): LINE -(0, 0)
DO WHILE m >= 0
diff = ABS(xb - xa) + ABS(yb - ya)
IF g < p AND diff > eps THEN
m = m + 1: g = g + 1: s(m) = g
GOSUB graphics
xa = xan: ya = yan: xb = xbn: yb = ybn
ELSE
xa = xa(m): ya = ya(m): xb = xb(m): yb = yb(m)
g = s(m): m = m - 1
END IF
LOOP: END
graphics:
u = xb - xa: v = yb -ya
xan = xb: yan = yb
xbn = xb + a1 * u - b1 * v: ybn = yb + b1 * u + a1 * v
un = xbn - xan: vn = ybn - yan
xcn = xbn + vn: ycn = ybn - un
xdn = xan + vn: ydn = yan - un
LINE (xan, yan)-(xbn, ybn): LINE -(xcn, ycn)
LINE -(xdn, ydn): LINE -(xan, yan)
xa(m) = xdn: ya(m) = ydn
xb(m) = xa(m) + a2 * u - b2 * v: yb(m) = ya(m) + b2 * u + a2 * v
ur = xb(m) - xa(m): vr = yb(m) - ya(m)
xcr = xb(m) + vr: ycr = yb(m) - ur
xdr = xa(m) + vr: ydr = ya(m) - ur
LINE (xa(m), ya(m))-(xb(m), yb(m)): LINE -(xcr, ycr)
LINE -(xdr, ydr): LINE -(xa(m), ya(m))
RETURN
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment