SCREEN 13 RANDOMIZE TIMER REM CONSTANTS AND DIMENSIONS DIM P(4, 150, 2) PI = 3.141592654# CX = 160 CY = 100 RM = 90 isStart = 0 4990 REM ART FORM 1 5000 N = INT(RND(1) * 4 + 3) 5010 AN = PI / N 5020 R = (RND(1) * .2 + .3) * RM: RR = 100 5030 M = INT(RND(1) * 30 / N + 10) 5040 IY = R / M 5050 IX = (RR - R) * TAN(AN) / M 5060 REM DEFINE BASIC CURVE 5070 FOR i = 0 TO M: P(0, i, 1) = 0: P(0, i, 2) = i * IY: NEXT i 5080 P(2, 0, 1) = 0: P(2, 0, 2) = 0: P(2, 1, 1) = 0: P(2, 1, 2) = IY 5090 FOR i = 2 TO M + 10 5100 B1 = (i - 1) * IY 5110 B2 = i * IY 5120 M1 = (RR - B1) / ((i - 1) * IX) 5130 M2 = (RR - B2) / (i * IX) 5140 P(2, i, 1) = (B2 - B1) / (M1 - M2) 5150 P(2, i, 2) = P(2, i, 1) * M1 + B1 5170 NEXT i 5180 REM ROTATE AND TRANSLATE BASIC CURVE 5190 CA = COS(AN - PI): SA = SIN(AN - PI) 5200 FOR i = 0 TO M + 10 5210 X = P(2, i, 1) * CA - P(2, i, 2) * SA 5220 Y = P(2, i, 1) * SA + P(2, i, 2) * CA + RM 5230 P(2, i, 1) = X: P(2, i, 2) = Y 5250 NEXT i 5260 REM CALCULATE END POINTS 5270 P(1, 0, 1) = 0: P(1, 0, 2) = RM 5280 FOR i = 1 TO M 5290 B1 = i * IY: M1 = (RR - B1) / (i * IX) 5300 FOR J = 1 TO M + 10 5310 IF P(2, J, 1) = P(2, J - 1, 1) THEN M2 = 9999: GOTO 5330 5320 M2 = (P(2, J, 2) - P(2, J - 1, 2)) / (P(2, J, 1) - P(2, J - 1, 1)) 5330 X = (P(2, J - 1, 2) - P(2, J - 1, 1) * M2 - B1) / (M1 - M2) 5340 IF X < P(2, J - 1, 1) OR X >= P(2, J, 1) GOTO 5380 5350 P(1, i, 1) = X 5360 P(1, i, 2) = M1 * X + B1 5370 GOTO 5400 5380 NEXT J 5400 NEXT i 5410 GOSUB chooseColor 5420 REM GRAPH ROUTINE 5430 FOR i = 0 TO N - 1 5440 CA = COS(2 * i * AN): SA = SIN(2 * i * AN) 5450 X = 0: Y = 0 5460 GOSUB 5550 5470 NEXT i 5480 FOR i = 0 TO N - 1 5490 CA = COS(2 * i * AN + AN + PI): SA = SIN(2 * i * AN + AN + PI) 5500 X = -RM * SIN(2 * i * AN + AN): Y = RM * COS(2 * i * AN + AN) 5510 GOSUB 5550 5520 NEXT i 5530 FOR i = 1 TO 100: GOSUB Pause: NEXT i GOTO 4990 5540 REM LINE ROTATE, TRANSLATE, AND PLOT ROUTINE 5550 PSET (CX + X + P(1, 0, 1) * CA - P(1, 0, 2) * SA, CY - Y - P(1, 0, 1) * SA - P(1, 0, 2) * CA): GOSUB Pause 5560 LINE -(CX + X + P(0, 0, 1) * CA - P(0, 0, 2) * SA, CY - Y - P(0, 0, 1) * SA - P(0, 0, 2) * CA): GOSUB Pause 5570 FOR J = 1 TO M 5580 PSET (CX + X + P(1, J, 1) * CA - P(1, J, 2) * SA, CY - Y - P(1, J, 1) * SA - P(1, J, 2) * CA): GOSUB Pause 5590 LINE -(CX + X + P(0, J, 1) * CA - P(0, J, 2) * SA, CY - Y - P(0, J, 1) * SA - P(0, J, 2) * CA): GOSUB Pause 5600 LINE -(CX + X - P(1, J, 1) * CA - P(1, J, 2) * SA, CY - Y + P(1, J, 1) * SA - P(1, J, 2) * CA): GOSUB Pause 5620 NEXT J 5630 RETURN Pause: FOR j1 = 1 TO 10000 IF INKEY$ <> "" THEN GOTO endProgram END IF NEXT RETURN chooseColor: IF RND - .5 > 0 THEN COLOR 7 ELSE IF RND - .5 > 0 OR isStart = 0 THEN COLOR 4 ELSE COLOR 0 END IF END IF 'CLS isStart = 1 RETURN endProgram: COLOR 7 END ' TODO: ' remove linenumbers ' more colors