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
         

1) spiral 5 50
2) (spiral 5 50 -0.8)
3) (spiral 5 50 0.8)



 アルキメデスのうずまき線です。
円周角と動径を等分して、交点を順次結んで出来る曲線です。
手続き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

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

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

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




 さて、このヒマワリの花も、うずまき曲線だけで出来ています。
最初の曲線を描いたら、サイズと比率を変更して次の曲線で、外側の花弁を一気に描かせています。

 もっとも、最近のヒマワリの花は、中心部より外側の花弁が大きい花が、流行りみたいですから、プログラムを変更してみて描いて下さいね。:-b