ludus/build/svg_test.mjs

71 lines
1.3 KiB
JavaScript
Raw Normal View History

2024-11-03 22:19:11 +00:00
import {run, svg, stdout} from "./ludus.mjs"
const code = `
2025-06-10 20:59:37 +00:00
background! (colors :white)
pencolor! (colors :maroon)
2024-11-03 21:45:20 +00:00
2025-06-10 20:59:37 +00:00
fn ngon! (n, edge) -> {
repeat n {
forward! (edge)
right! (inv (n))
}
}
2024-11-03 21:45:20 +00:00
2025-06-10 20:59:37 +00:00
fn cngon! (n, radius) -> {
let angle = add (inv (4), inv (mult (2, n)))
let edge = mult (2, radius, sin (inv (mult (2, n))))
2024-11-03 21:45:20 +00:00
2025-06-10 20:59:37 +00:00
penup! ()
forward! (radius)
right! (angle)
pendown! ()
ngon! (n, edge)
left! (angle)
penup! ()
back! (radius)
pendown! ()
}
fn twisty_nonagons! (times, iter, radius, growth) -> {
if gte? (iter, times) then :ok
else {
cngon! (9, radius)
right! (inv (times))
twisty_nonagons! (times, inc (iter), add (radius, growth), growth)
}
}
twisty_nonagons! (10, 0, 100, 3)
fn centre_squares! (times, radius, growth) -> {
if lt? (times, 1) then :ok
else {
cngon! (4, radius)
centre_squares! (dec (times), add (radius, growth), growth)
}
}
& right! (0.125)
& centre_squares! (10, 100, 4)
fn twisty_triangles! (times, radius, angle, growth) -> {
if lt? (times, 1) then :ok
else {
cngon! (3, radius)
right! (angle)
twisty_triangles! (dec (times), sub (radius, growth), angle, growth)
}
}
& right! (inv (6))
& twisty_triangles! (8, 100, inv (120), 10)
& hideturtle! ()
2024-11-03 21:45:20 +00:00
`
const result = run(code)
2024-11-03 22:19:11 +00:00
// console.log(stdout(result))
2024-08-01 22:50:09 +00:00
console.log(svg(result.io.turtle.data))