忍者ブログ

好きい夢 昭和な気まぐれ飛行機

行列で蝶を愛でる 飛翔

3次元空間にて蝶を飛翔させることができました。
ジンバルによる座標計算、面白いですねぇ。そして蝶が描画される様子は美しくそして不思議です。

詳しいことは、また、youtubeにて。
 
 https://www.youtube.com/watch?v=dbBBlSNvXyU
 
(import (normal math)
        (normal kids)
        (normal system)
        (normal gauche))

(set-zoom 50)
(set-origin 300 300)

(define (butterfly t)
  (let* ((r (+ (exp (sin t))
               (* -2 (cos (* 4 t)))
               (expt (sin (/ t 12)) 5)))
         (x (* r (cos t)))
         (y (* r (sin t))))
    (values x y)))

(define (draw-butterfly n)
  (for-each (lambda (t)
              (let-values (((x y)(butterfly t)))
                (line x y)
                (move x y)))
            (iota (* 24 pi) 0 (/ pi n))))

(define (draw-butterfly3D psi theta phi)
  (for-each (lambda (t)
                (draw-r3d (texsq3 (butterfly t)) psi theta phi))
            (iota (* 24 pi) 0 (/ pi 240))))

(define (draw-emergence)
  (let loop ((n 1))
    (if (> n 24)
        #t
        (begin (cls)
               (draw-butterfly n)
               (sleep 200)
               (loop (+ n 1))))))


(define (rot-e3 p)
  (let ((c3 (cos p))
        (s3 (sin p)))
    (list->matrix (list (list c3 (* -1 s3) 0)
                        (list s3 c3        0)
                        (list 0  0         1)))))

(define (rot-e2 t)
  (let ((c2 (cos t))
        (s2 (sin t)))
    (list->matrix (list (list c2        0 s2)
                        (list 0         1 0)
                        (list (* -1 s2) 0 c2)))))

(define (rot-3d psi theta phi)
  (m* (rot-e3 psi) (m* (rot-e2 theta) (rot-e3 phi))))

(define (draw-r3d v psi theta phi)
  (let* ((rad (/ pi 180))
         (psi (* rad psi))
         (theta (* rad theta))
         (phi (* rad phi))
         (v1 (m* (rot-3d psi theta phi) v)))
    (line3D (matrix-ref v1 1 1)
            (matrix-ref v1 2 1)
            (matrix-ref v1 3 1))
    (move3D (matrix-ref v1 1 1)
            (matrix-ref v1 2 1)
            (matrix-ref v1 3 1))))

;;2次元データにz軸の0を加えて列ベクトルにする。
(define (texsq3 mv)
  (let-values (((x y) mv))
    (list->matrix (list (list x) (list y) (list 0)))))


 

PR

コメント

プロフィール

HN:
No Name Ninja
性別:
非公開

P R