ludus-scripts/cngon.ld

42 lines
937 B
Plaintext

& Lesson 12: c_ngon
& Clayson walks you through this step by step
& It's just high school trigonometry
& But that probably strikes terror into the hearts of PhD students in the humanities
& So I've adapted his solution.
& He walks you carefully through it on pp. 24-31.
fn ngon! (sides, size) -> repeat sides {
fd! (size)
rt! (inv (sides))
}
fn c_ngon! (sides, radius) -> {
& first, some fancy trigonometry
& don't read this if you don't want to
& but: there are two hard problems here
& how far to turn before drawing the ngon
& and how long each side should be to fit inside the radius
let entry_turn = sub (
0.5
mult (
0.25
sub (sides, 2)
inv (sides)))
let side_length = mult (
2
radius
sin (div (0.5, sides)))
& now that we have the math: what do we need the turtle to do
pu! ()
fd! (radius)
pd! ()
rt! (entry_turn)
ngon! (sides, side_length)
lt! (entry_turn)
pu! ()
bk! (radius)
pd! ()
}