仮想計算機構

IT業界と無縁な派遣社員のブログ

直進形汎トロコイドの描画

以前、Schemeで描画するときに座標の取り方を指定できるようにしました。
【奥村本】座標の取り方を変えて線を描画する - 仮想計算機構

これを利用して色々な線を描画していきます。今回は曲線!ってことで以下を参考にしました。
周期関数による幾何学模様の生成とその変換
描くのは論文中の2.2の直進形汎トロコイドです。

コードは以下の通りです。

(include "grBMP.scm")
(include "line.scm")
(include "circle.scm")
(include "window.scm")
(use math.const)

(define (F1-base a b k)
    (lambda (t) (+ (* a (sin (* b t))) (* k t)))
)

(define (F2-base a c)
    (lambda (t) (* a (cos (* c t))))
)

(gr_window -10 -10 100 10 #f)
(define n_loop 500)
(define dt 0.1)

(letrec ((a -2) (b 3) (c 1) (k (/ pi 2)) (F1 (F1-base a b k)) (F2 (F2-base a c)))
    (do
        ((i 0 (+ i 1)) (t 0 (+ t dt)))
        ((= i n_loop) (gr_BMP "test.bmp")) 
        (gr_wline (F1 t) (F2 t) (F1 (+ t dt)) (F2 (+ t dt)) WHITE)
    )
)

以下、実行結果になります。
f:id:riverta1992:20200524182856j:plain
変な宇宙人の集団みたいです。
次にパラメータc=2に変更して実行したのが次の画像です。
f:id:riverta1992:20200524182911j:plain
最後にパラメータをn_loop=1800, a=-3, b=2, c=0.3, k=pi/6 に変更して実行します。実行結果は以下のとおりです。
f:id:riverta1992:20200524182925j:plain
宇宙人の次はワカメみたいなものができてしまいました。
パラメータいじると面白そうです。