'=========================================================================== ' Subject: DRAW A HILBERT CURVE Date: 11-02-96 (18:32) ' Author: Jamshid Khoshrangi Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: EGAVGA.ABC '=========================================================================== ' HILBERT.BAS -- Program to draw a Hilbert Curve ' ' Translated from Dr. Roger T. Steven's C sample ' code in _Fractal Programming in C_ pp. 199-200. ' ' Courtesy JAMSHID KHOSHRANGI ' Modified slightly by Andrew Dart DEFINT A-Z DECLARE SUB generate (r1 AS INTEGER, r2 AS INTEGER) DIM Temp AS INTEGER DIM SHARED level AS INTEGER DIM r AS INTEGER DIM SHARED x1 AS INTEGER DIM SHARED y1 AS INTEGER DIM SHARED x2 AS INTEGER DIM SHARED y2 AS INTEGER DIM SHARED WhatColor AS INTEGER SCREEN 12 CLS DO x1 = 140 y1 = 60 x2 = 140 y2 = 60 level = 7 generate 3, 0 LOOP END SUB generate (r1 AS INTEGER, r2 AS INTEGER) SHARED Governor level = level - 1 IF level > 0 THEN generate r2, r1 END IF x2 = x2 + r1 y2 = y2 + r2 LINE (x1, y1)-(x2, y2), WhatColor x1 = x2 y1 = y2 IF level > 0 THEN generate r1, r2 END IF x2 = x2 + r2 y2 = y2 + r1 LINE (x1, y1)-(x2, y2), WhatColor x1 = x2 y1 = y2 IF level > 0 THEN generate r1, r2 END IF x2 = x2 - r1 y2 = y2 - r2 LINE (x1, y1)-(x2, y2), WhatColor x1 = x2 y1 = y2 IF level > 0 THEN generate -r2, -r1 END IF level = level + 1 IF level > 3 THEN i$ = INKEY$ IF i$ = CHR$(27) THEN END END IF IF level > 2 THEN WhatColor = 1 + INT(TIMER MOD 15) END IF END SUB