Pythonでドラゴン曲線

[pukiwiki]
元記事のL-Systemを使ったコードのほうがカッコイイ&いろんな曲線に応用できますー
—-
*[[Python Fractals :http://natesoares.com/projects/python-fractals/]]
L-Systemを使いドラゴン曲線を描くチュートリアル。[[ドラゴン曲線自体の説明:http://natesoares.com/writing/python-fractals-1/?project=python-fractals]]も判りやすいです。英語ですが。。。

こちらを読んでも難しくてよく判らなかったので、適当にマネして書いてみました。

http://boxheadroom.com/wp/wp-content/uploads/2009/04/dragon7.png
シャエルスーツっぽい模様♪

-[[ググる:ドラゴン曲線]]
[/pukiwiki]

元記事にならってヘッダに。

turtleモジュール使ってるので、若干遅いですけれども、画面でピコピコ動くのが楽しいです。

# -*- coding: utf-8 -*-
import turtle

def neg(x):
    return 0 if  x else 1
plist=[]
dt=2
turtle.setheading(0)

turtle.delay(0)
turtle.speed("fastest")
turtle.setx(0)  
turtle.sety(0)
turtle.clear()

for j in xrange(5): #数字を増やすと、図形が複雑になりますが、時間がかかります
    #print plist
    plist2=[0]+[neg(x) for x in reversed(plist)]
    #0は左 1は右
    for i in plist2:
        
        if i :
            turtle.right(90)
        else :
            turtle.left(90)
        turtle.forward(dt)
    plist+=plist2

[pukiwiki]
あとで見るとき用のメモ。
文字だけだとわかりにくいですが。。。(すんません)
-ドラゴン曲線において、タートルグラフィックスのカーソル(タートル)は、一歩進んでは右、または左を向く、を繰り返す。
-いままで進んできた道筋を 「左左右」のように記憶
-次のターンは、まず左、そして それまでの道筋を逆順にし、 左右を反転した進路をとる
–左 + 逆順反転(「左左右」) -> 左 左右右
– 「左左右」 + 「左左右右」を新しい順路として記憶。 繰り返し

(次は左 + 逆順反転(「左左右左左右右」) -> 左 左左右右左右右 になります)
—-
-L
-LR
-LLRR
-LLLRRLRR

・・・

[/pukiwiki]

コメントを残す

メールアドレスが公開されることはありません。