Pythonでフラクタル(ジュリア集合)
ジュリア集合の定義を調べるのにかかった時間のほうが実装にかかった時間より長い…。やっぱスクリプト言語って楽でいいな。 もっとはやくPILを勉強すればよかった。ものすごく遅いんじゃないかと不安だったけれども0.3秒くらいでした。でもこの2倍のサイズにすれば1.2秒だと考えるとリアルタイム性はないな。JAVAで仮に10倍早くなればまだ可能性はあるか…(何の可能性だ)
あー。こういうきれいなところは発散するまでに時間がかかるところだから計算時間も余計にかかるか…。0.7秒。いやなに、MATRIXの3番目のオープニングみたいなフラクタルの中に入っていく画像が作りたかっただけなんだけど。やっぱり各フレームBMPで吐き出しておいてAVIMakerでつなぐとするかな…。
import Image
import ImageDraw
SIZE=128
image = Image.new("L", (SIZE, SIZE))
d = ImageDraw.Draw(image)
c = 0.5 + 0.2j
for x in range(SIZE):
for y in range(SIZE):
re=(x*2.0/SIZE)-1.0
im=(y*2.0/SIZE)-1.0
z=re+im*1j
for i in range(128):
if abs(z) > 2.0: break
z = z * z + c
d.point((x,y),i*2)
image.save(r"c:\julia.png", "PNG")
どうでもいいことだけど、クォータニオンを使えば4次元空間上に(げふんげふん) 実際に動画作りに使うとしたらcの値とzの範囲を引数として与えられるようにすべきですな。
c=-0.78+i*0.002+0.23j(i<40), center=-0.5+0.2j, scale=1.0。この手の動画ってMPEGで圧縮するととんでもないことになりそうなので無圧縮AVI(2メガ弱) 25フレーム目から30フレーム目の間くらいのパラメータをゆっくり進みながらカメラが脇の黒い部分を通り抜けていくというのが映像としては面白いのかな。 しかし圧縮できないとなると…このサイズで40フレームで2メガだから…うーん、やる気が萎えた…。