---------- Sierpinski Triangle (Chaos Game) ---------------- TO CHAOS HT setc 69 MAKE "POINTS [[-220 -100] [0 -100] [-110 80]] MAKE "TEMP :POINTS MOVETO ( FIRST FIRST :POINTS ) ( LAST FIRST :POINTS ) MAKE "TEMP BF :TEMP REPEAT 2 [pointto FIRST :TEMP FD Howfar XCOR YCOR ( FIRST FIRST :TEMP ) ( LAST FIRST :TEMP ) MAKE "TEMP BF :TEMP] pointto FIRST :POINTS FD Howfar XCOR YCOR ( FIRST FIRST :POINTS ) ( LAST FIRST :POINTS ) REPEAT 3500 [MAKE "TARGET ( 1 + RANDOM 3 ) MAKE "DEST PICKout :TARGET :POINTS pointto :DEST PU FD ( 0.5 * Howfar XCOR YCOR ( FIRST :DEST ) ( LAST :DEST ) ) PD DOT XCOR YCOR] finis END TO pickout :N :LIST REPEAT :N [MAKE "ANS FIRST :LIST MAKE "LIST BF :LIST] OP :ANS END to pointto :list make "x first :list make "y last :list newturtle "temp ht moveto :x :y tto "t1 towards "temp remove "temp end to dot :x :y setsh 60 stamp end TO Howfar :X1 :Y1 :X2 :Y2 MAKE "DELX2 ( :X1 - :X2 ) * ( :X1 - :X2 ) MAKE "DELY2 ( :Y1 - :Y2 ) * ( :Y1 - :Y2 ) OP SQRT ( :DELX2 + :DELY2 ) END ---------- Sierpinski Triangle (Fractal Curve) ---------------- TO SIERPINSKICURVE :SIDE :LEVEL ; [USE SIERPINSKICURVE 3500 7] MOVETO (220) -100 SETH -90 SIERP :SIDE :LEVEL -1 END TO SIERP :SIDE :LEVEL :DIRECTION IF :LEVEL = 0 [FD :SIDE STOP] LT :DIRECTION * 60 SIERP (:SIDE / 3) (:LEVEL - 1) (-1 * :direction) RT :DIRECTION * 60 SIERP (:SIDE / 3) (:LEVEL - 1) ( :DIRECTION ) RT :DIRECTION * 60 SIERP (:SIDE / 3) (:LEVEL - 1) (-1 * :direction) LT :DIRECTION * 60 END TO MOVETO :X :Y PU SETX :X SETY :Y PD END