Spiral
to msgn :num
output * -1 :num
end
to angle2rad :anglenum
output / * :anglenum pi 180
end
to spiral :roll :size [:oval 1] 2
(local
"center "po.x "po.y
"loop "step
"exp
"currentHead
"oval.x "oval.y
"po.xx "po.yy
)
make "center getxy
make "loop (* 360 :roll)
make "step (/ :loop (* :roll 128))
make "exp (/ :size (* :roll 6.28))
make "currentHead heading
make "oval.x 1
make "oval.y 1
if :oval > 0 then make "oval.x :oval else make "oval.y :oval
if :size < 0 [make "loop msgn :loop make "step msgn :step]
(for "i 0 :loop [
make "po.x (product :exp :oval.x angle2rad :i cos :i)
make "po.y (product :exp :oval.y angle2rad :i sin :i)
make "po.xx (- * :po.x cos :currentHead (* :po.y sin :currentHead))
make "po.yy (+ * :po.x sin :currentHead (* :po.y cos :currentHead))
make "po.xx (+ :po.xx first :center)
make "po.yy (+ :po.yy last :center)
setxy sentence :po.xx :po.yy
] :step)
end
![](../img/spiral.gif)
1) spiral 5 50
2) (spiral 5 50 -0.8)
3) (spiral 5 50 0.8)
![](../img/archimedeanSpiral.gif)
アルキメデスのうずまき線です。
円周角と動径を等分して、交点を順次結んで出来る曲線です。
手続きSpiralでは、縦と横の比率を変更できる様に拡張しています。
右図では、円周角と動径が大ざっぱなので曲線に見えませんが、これを細分すれば徐々に曲線になって行きます。
Sample17
to sample17 :size
local "center
make "center getxy
repeat 4 [
spiral 1 :size
penup
setxy :center
pendown
right 90
]
repeat 4 [
spiral 1 msgn :size
penup
setxy :center
pendown
left 90
]
end
![](../img/s17.gif)
Sample18
to sample18 :size
local "center
make "center getxy
repeat 4 [
spiral 0.5 :size
penup
setxy :center
pendown
right 90
]
repeat 4 [
spiral 0.5 msgn :size
penup
setxy :center
pendown
left 90
]
end
![](../img/s18.gif)
Sample19
to sample19 :size
local "center
make "center getxy
repeat 6 [
(spiral 0.75 :size 0.5)
penup
setxy :center
pendown
right 60
]
repeat 6 [
(spiral 0.75 msgn :size 0.5)
penup
setxy :center
pendown
left 60
]
end
![](../img/s19.gif)
Sample17からSample19までの引数 size
は、100を指定して実行しています。
うずまき曲線だけでも、色々な図形が描けますね。
size
に、マイナス値を指定すると時計回りのうずまき線を描くのが判りますね。
ただし、縦横比率が変わると周り方も逆になるので、注意して下さい。
Sample20
to sample20 :size
local "center
make "center getxy
make "size (* :size 0.665)
repeat 32 [
(spiral 0.5 :size -0.5)
left 97
(spiral 0.5 (/ :size 5) -4)
right 97
penup
setxy :center
pendown
right 11.25
]
repeat 32 [
(spiral 0.5 msgn :size -0.5)
penup
setxy :center
pendown
right 11.25
]
end
![](../img/s20.gif)
さて、このヒマワリの花も、うずまき曲線だけで出来ています。
最初の曲線を描いたら、サイズと比率を変更して次の曲線で、外側の花弁を一気に描かせています。
もっとも、最近のヒマワリの花は、中心部より外側の花弁が大きい花が、流行りみたいですから、プログラムを変更してみて描いて下さいね。:-b
![](../img/bret.gif)
|