# Main Command: Go # Hop_Along by Guy Walker # www.logoarts.co.uk to new # set default screen, pen and turtle ResetAll SetScreenSize [400 400] HideTurtle SetSC Black SetPC Green SetPS 1 PenUp end to init Make "A 0.1*((Random 199)-99) Make "B 0.1*((Random 199)-99) Make "C (Random 19)-9 Make "Cycle 6000 end to display :a :b :c :cycle SetPC White SetPos [-190 184] Label "Hopalong SetXY Minus 194 Minus 196 Label (List :A :B :C) SetX 194-LabelLength :Cycle Label :Cycle end to fit2screen :a :b :c :cycle Make "X 0 Make "Y 0 Make "Xmax 0 Make "Xmin 0 Make "Ymax 0 Make "Ymin 0 Repeat :Cycle [HopAlong :A :B :C If :X > :Xmax [Make "Xmax :X] If :X < :Xmin [Make "Xmin :X] If :Y > :Ymax [Make "Ymax :Y] If :Y < :Ymin [Make "Ymin :Y] ] Make "Xsize :Xmax + Abs :Xmin Make "Scale 380/:XSize Make "Xcent Minus (:Xmax + :Xmin) / 2 Make "Ycent Minus (:Ymax + :Ymin) / 2 end to hop :a :b :c :cycle Make "X 0 Make "Y 0 Repeat 180 [ SetPC Hue2 RepCount Repeat Integer :Cycle/180 [HopAlong :A :B :C Dot List :Scale*(:X+:XCent) :Scale*(:Y+:YCent) ] ] end to hopalong :a :b :c Make "Xnew :Y-((Sign :X)*Sqrt (Abs (:B*:X-:C))) # Make "Xnew :Y-((Sign :X)*Abs((Sine :X)*(Cos :B)+:C-:X*Sine (:A+:B+:C))) # 3-ply fractal Make "Y :A-:X Make "X :Xnew end to sign :num # return sign (-1 or 1) of number If :Num < 0 [Output Minus 1] [Output 1] end To Hue2 :Theta # Output RGB hue list from angle :Theta Make "Red Abs 255*Sin :Theta Make "Green Abs 255*Sin (:Theta+120) Make "Blue Abs 255*Sin (:Theta+240) Output (List :Red :Green :Blue) End to go New Repeat 100 [ Init Fit2Screen :A :B :C :Cycle Wash Hop :A :B :C :Cycle Display :A :B :C :Cycle Wait 300] end to gox :a :b :c :cycle New Fit2Screen :A :B :C :Cycle Hop :A :B :C :Cycle Display :A :B :C :Cycle end