LoginSignup
5

More than 5 years have passed since last update.

ローレンツアトラクタをPOV-Rayで動画にする

Last updated at Posted at 2014-07-17

はじめに

ツイッターでpovrayで検索すると、学校の課題でヒーヒー行っている学生さんらしきツイートを多々目にするため、POV-Rayをあまり知らないと悪いイメージがあるかもしれません。

しかし、Qiitaの住人の方々の様にコードがスラスラかければ、色々おもしろいことが出来ます。

今回は微分方程式の解のプロットを各座標を球に置き換えて、POV-Rayでそれらの周りを回るアニメーションを作ってみます。

Maximaでローレンツアトラクタのデータをつくる

lorenz.txt
load("dynamics");
f(x,y,z):=-10*(x-y);
g(x,y,z):=-y-x*z+28*x;
h(x,y,z):=x*y-8/3*z;
rkdat:rk([f(x,y,z),g(x,y,z),h(x,y,z)],[x,y,z],[1,1,1],[t,0,50,0.01]);
system("pwd");
write_data(rkdat,"rk.dat");

プロットデータをPOV-Rayのファイルにする

今回は、Perlで出力された各プロットを球として表示するようにしてみました。

#!/usr/bin/env perl

print<<'EOF';
#include "colors.inc"
#include "skies.inc"
#include "glass.inc"
camera{ 
    location <sin(clock*pi*2)*600,0,cos(clock*2*pi)*600>
    up <0,1,0>
    look_at <0,0,0>
} 
light_source { 
    <100,100,-100> 
    color rgb <1,1,1>
} 
EOF

while(<>) {
    @dat=split(/ /);
    @dat = map {$_ * 10} @dat;
print<<"EOF";
object {
    sphere {<$dat[1] , $dat[2] , $dat[3]>,1}
    material {
    texture {
        pigment{color Clear}  
        finish{ F_Glass1 }
    }
interior { 
I_Glass1
fade_color Col_Emerald_03
}
    }
}
EOF
}

print << 'EOT';
sky_sphere {
  S_Cloud5
}
EOT
chmod +x plot3d.pl
cat rk.dat |./plot3d.pl >test.pov

POV-Rayでレンダリングする

以下のコマンドで、レンダリングして、結果を複数のPNGファイルに書き出せます。

povray +A +H768 +W1024 +KFF60 test.pov 

静止画から動画に変換する

ffmpegでOSXのQuikTime Playerで開くことの出来るフォーマットで出力してみます。

ffmpeg -r 30 -i test%02d.png -vcodec libx264 -pix_fmt yuv420p lorenz.mp4

まとめ

微分方程式の解をPOV-Rayでレンダリングして表示することが出来ました。
lorenz_mp4.png

関連投稿

関連記事

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5