Quick Basic in Application

Fractal

Posted by: programmervb on: June 3, 2008

DECLARE SUB CURVE (X1!, Y1!, X2!, Y2!)
DECLARE FUNCTION DIST! (X1!, Y1!, X2!, Y2!)
DECLARE FUNCTION RADIANS! (X!)
DECLARE FUNCTION MOVEX! (X1!, Y1!, X2!, Y2!)
DECLARE FUNCTION MOVEY! (X1!, Y1!, X2!, Y2!)
‘*********************************
‘*                               *
‘*  A FRACTAL COASTLINE-RECURSE  *
‘*                               *
‘*********************************

DEFSNG A-Z
CLEAR , , 12000
SCREEN 2
CONST PI = 3.14159

WINDOW (-500!, 500!)-(500!, -500!)
X1 = -250: Y1 = 200
X2 = 250: Y2 = 200
CALL CURVE(X1, Y1, X2, Y2)
CALL CURVE(X2, Y2, 0, -Y2)
CALL CURVE(0, -Y2, X1, Y1)
SLEEP: END

SUB CURVE (X1, Y1, X2, Y2)
DEFSNG A-Z
DISPT = DIST(X1, Y1, X2, Y2)
IF DISPT < 10 THEN
EXIT SUB
END IF
NX1 = X1 + MOVEX(X1, Y1, X2, Y2)    ‘FIND THE COORDINATES FOR THE SPIKE
NY1 = Y1 + MOVEY(X1, Y1, X2, Y2)
LINE (X1, Y1)-(X2, Y2), 0           ‘ERASE THE PREVIOUS LINE
LINE (X1, Y1)-(NX1, NY1)            ‘MAKES THE SPIKE
LINE -(X2, Y2)
CALL CURVE(X1, Y1, NX1, NY1)
CALL CURVE(NX1, NY1, X2, Y2)        ‘RECURSES ON THE SPIKES
END SUB

FUNCTION DIST (X1, Y1, X2, Y2)
X = (X2 – X1) * (X2 – X1)       ‘FINDS THE DISTANCE BETWEEN POINTS
Y = (Y2 – Y1) * (Y2 – Y1)
DIST = SQR(X + Y)
END FUNCTION

FUNCTION MOVEX! (X1!, Y1!, X2!, Y2!)
‘local variables: angle(in radians), d, xshift,yshift

ANGLE = RADIANS!(15 + 60 * RND(1))         ‘A
IF RND(1) > .5 THEN ANGLE = -ANGLE
D = DIST(X1, X2, Y1, Y2)
R = (.15 + (.6 * RND(1))) * D               ‘B
XSHIFT = COS(ANGLE) * (X2 – X1)
YSHIFT = SIN(ANGLE) * (Y2 – Y1)
MOVEX = (R / D) * (XSHIFT – YSHIFT)
END FUNCTION

FUNCTION MOVEY! (X1!, Y1!, X2!, Y2!)
ANGLE = RADIANS(45)
D = DIST(X1, X2, Y1, Y2)
R = (SQR(2) / 2) * D
XSHIFT = SIN(ANGLE) * (X2 – X1)
YSHIFT = COS(ANGLE) * (Y2 – Y1)
MOVEY! = R / D * (XSHIFT + YSHIFT)
END FUNCTION

FUNCTION RADIANS! (X!)
RADIANS! = X! * PI / 180                ‘CONVERTS DEGREES TO RADIANS
END FUNCTION

Tags:

Leave a Reply