48 lines
1.0 KiB
Plaintext
48 lines
1.0 KiB
Plaintext
& Example Ludus implementation of the Dragon curve.
|
||
& https://en.m.wikipedia.org/wiki/L-system#Example_6:_dragon_curve
|
||
|
||
& variables : F G
|
||
& constants : + -
|
||
& start : F
|
||
& rules : (F -> F+G), (G -> F-G)
|
||
& angle : 90°
|
||
& F and G both mean "draw forward", + means "turn left by angle", and − means "turn right by angle"
|
||
|
||
& set a length for each segment
|
||
let length = 10
|
||
|
||
& set an angle for all turns, default to 1/3 for triangles
|
||
let angle = 0.25
|
||
|
||
fn f!
|
||
|
||
& define 'G' function from the grammaer
|
||
fn g! {
|
||
(0) -> fd!(length)
|
||
(n) -> {
|
||
f!(dec(n))
|
||
rt!(angle)
|
||
g!(dec(n))
|
||
}
|
||
}
|
||
|
||
& define 'F' function from the grammaer
|
||
fn f! {
|
||
(0) -> fd!(length)
|
||
(n) -> {
|
||
f!(dec(n))
|
||
lt!(angle)
|
||
g!(dec(n))
|
||
}
|
||
}
|
||
|
||
& this function defines the starting pattern.
|
||
& each of the f! and g! calls expand based on the grammar at the top of this example
|
||
fn dragon! (times) -> {
|
||
f!(times)
|
||
}
|
||
|
||
& call the base function with a number of iterations
|
||
& remember, this is exponential! high numbers can freeze your browser.
|
||
dragon!(10)
|