Simple drawing / Coordinate system
# Tortoise draws in the square field
# with follow geometry
#
# ^ Y axe
# |
# (0, 100) +------+ (100, 100)
# |DRAING|
# | AREA |
# | | X axe
# (0, 0) +------+-->
# ^ (0, 100)
# `- initial point
#
# Lets draw a simple figure
draw 10 10 # go to (10, 10)
draw 70 0 # go to (80, 10)
draw 0 50 # go to (80, 60)
draw -30 30 # go to (50, 90)
draw -30 -30 # go to (20, 60)
Simple drawing / Jumping, colors, line width
# If you do not want to drow,
# you can jump, but not draw
jump 20 10 # jump to (20, 10)
# Lets change background color
# colors are specified as triplet: red, green, blue
# each component lay in interval from 0 to 100
# Now we set dark gray background
color 10 10 10
clear
# Lets change paint color
color 100 100 100 # We set up white color
# and now lets setup line width
width 2
# draw our picture
draw 60 0 # go to (0.8, 0.1)
draw 0 50 # go to (0.8, 0.6)
color 100 0 0 # set red color
draw -30 30 # go to (0.5, 0.9)
draw -30 -30 # go to (0.2, 0.6)
color 100 100 100 # set white color
draw 0 -50 # go to (0.2, 0.1)
Variables / Simple
# You can use variables instead numbers.
# To set up variable, use set statement:
set a 33 # let a is 33
# Now you can use variable a
color 0 0 0 # set black
clear # background
color a 100 a # set color to light green (33, 100, 33)
jump a a # jump to .1 .1
draw a 0 # draw to .2 .1
draw 0 a # draw to .2 .2
Variables / Mathematica
# You can use manipulate variables.
set a 3 # a = 3
set b sum a 2 # b = a + 2 = 5
set c prod b 6 # c = b * 6 = 30
set a sum c a # a = c + a = 33
# i.e. a = 33
# or the same manipulation in one exprassion
set a 3
set a sum prod sum a 2 6 a
# a = (a + 2) * 6 + a
# how to undestand:
# set a (sum (prod (sum a 2) 6) a)
# Now you can use variable a
color 0 0 0 # set black
clear # background
color a 100 a # set color to light green (33, 100, 33)
jump a a # jump to .1 .1
draw a 0 # draw to .2 .1
draw 0 a # draw to .2 .2
Logo
color 20 20 20
clear
width 4
color 80 80 80
jump 10 10
draw 40 80
repeat 10 begin
draw 40 -80
draw -10 0
draw -30 10
draw -30 -10
draw -3.8 0
jump -1.2 -.5
scale .7
draw 50 100
end
Nested loops
def s begin
draw 10 0
draw 0 10
draw -10 0
draw 0 -10
end
width 3
set y 5
repeat 5 begin
set x 5
repeat 5 begin
local begin
jump x y
set c quot sum x y 2
color c c c
call s
end
set x sum x 20
end
set y sum y 20
end
Loop recursion
def b local if decr level begin
set a quot aa sum LEVEL minus level
left prod 4 a # -- HACK
repeat SPROUT begin
local begin
draw 0 1
scale .4
call b
end
right a
end
end
jump 50 50
scale 30
width .1
set SPROUT 9
set aa quot 360 SPROUT
set LEVEL 5
set level LEVEL
set ang_f 1
call b
First
jump 10 10
draw 40 0
draw 0 40
draw -40 0
draw 0 -40
Tree
def X if level begin
decr level
draw 0 10
local begin
left 20
call X
end
local begin
right 20
call X
end
end
jump 50 10
set level 7
call X
Tree slow
def X if level begin
decr level
draw 0 6
local begin
left 20
call X
end
local begin
right 20
call X
end
end
jump 50 10
set level 10
call X
Tail recursion
def F if level begin
set s prod level 20
draw 0 s
draw s 0
draw 0 minus s
draw minus s 0
decr level
call F
end
jump 10 10
set level 4
call F
L-System / Peano-Gosper curve
# Peano-Gosper curve
#
# Rule:
# X -> X+YF++YF-FX--FXFX-YF+
# Y -> -FX+YFYF++YF+FX--FX-Y
# Axiom:
# FX
# Angle:
# 60
def F draw 1 0
def X if level begin
decr level
call X
right 60
call Y call F
right 60 right 60
call Y call F
left 60
call F call X
left 60 left 60
call F call X call F call X
left 60
call Y call F
right 60
incr level
end
def Y if level begin
decr level
left 60
call F call X
right 60
call Y call F call Y call F
right 60 right 60
call Y call F
right 60
call F call X
left 60 left 60
call F call X
left 60
call Y
incr level
end
jump 63 95
scale 1.7
width .1
set level 4
call F
call X
L-System / tree
# L-system tree
# Angle : 16
# Axiom : F
# Rule : F -> FF-[-F+F+F]+[+F-F-F]
def F
ifelse level
begin
decr level
call F
call F
left 16
local
begin
left 16
call F
right 16
call F
right 16
call F
end
right 16
local
begin
right 16
call F
left 16
call F
left 16
call F
end
incr level
end
draw 0 1
width 0.12
jump 95 05
scale 2.1
left 35
set level 4
call F
L-System / Smooth dragon curve as L-system
# Smooth dragon curve as L-system
def F draw 0 1
def turn repeat 9 begin
call F right angle
end
def r begin
set angle 10
call turn
end
def l begin
set angle -10
call turn
end
def X if level begin
decr level
call X call r call Y call r
incr level
end
def Y if level begin
decr level
call l call X call l call Y
incr level
end
width 3
jump 25 35
scale .36
scale .5
set level 9
call X
L-System / Sierpinski triangle
# Sierpinski triangle
# A, (A -> B-A-B), (B -> A+B+A)
# A -> B-A-B
def A ifelse level begin
decr level
call B
left 60
call A
left 60
call B
incr level
end
begin
color 0 100 100
draw 0 1
end
# B -> A+B+A
def B ifelse level
begin
decr level
call A
right 60
call B
right 60
call A
incr level
end
begin
color 100 100 100
draw 0 1
end
color 0 0 0 clear
width 0.4
jump 90 15
left 90
scale 1.25
set level 6
call A