Pythonでドラゴン曲線



元記事のL-Systemを使ったコードのほうがカッコイイ&いろんな曲線に応用できますー


Python Fractals

L-Systemを使いドラゴン曲線を描くチュートリアル。ドラゴン曲線自体の説明も判りやすいです。英語ですが。。。

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

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

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

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

あとで見るとき用のメモ。
文字だけだとわかりにくいですが。。。(すんません)

  • ドラゴン曲線において、タートルグラフィックスのカーソル(タートル)は、一歩進んでは右、または左を向く、を繰り返す。
  • いままで進んできた道筋を 「左左右」のように記憶
  • 次のターンは、まず左、そして それまでの道筋を逆順にし、 左右を反転した進路をとる
    • 左 + 逆順反転(「左左右」) -> 左 左右右
  • 「左左右」 + 「左左右右」を新しい順路として記憶。 繰り返し

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


  • LR
  • LLRR
  • LLLRRLRR

・・・

Tags: ,

Related posts

タグ: ,

コメントは受け付けていません。