タートルグラフィックを使用して、L-Systemコードで記録された状態を復元します

StackOverflow https://stackoverflow.com/questions/6315399

質問

タートルグラフィックスを使用してL-Systems(TurtleWorldライブラリ)を再現しています。私が適用しようとしたルールは、以前の保存された状態に戻ることを伴わないときにうまく機能しますが、[そして以下のルールを参照]があるときはいつでも、物事が破損し、カメはランダムなBSを引きます。

基本的に、「]が存在する場所をチェックするIFステートメントは、コードが壊れる場所です。 (また、私はそれが今のところ最適化されていないことを知っています、私は明確にするためにしっかりしたものを書きました...)

編集:新しいコード - get_heading()があるため、この計算角度全体は必要ありませんでした。

import turtle

turtle.down()

n = 'F'

s1 = 'F'
s2 = 'FF-[-F+F+F]+[+F-F-F]'
#s3 = 'F'
#s4 = 'FF'

steps = 5

for i in range(steps):
    n = n.replace(s1,s2)
    #n = n.replace(s3,s4)

a = 25

x = []
y = []
angle = []

for i in n:
    if i == 'F':
        turtle.forward(2)
    if i == '+':
        turtle.left(a)
    if i == '-':
        turtle.right(a)
    if i=='[':
        x.append(turtle.xcor())
        y.append(turtle.ycor())
        angle.append(turtle.heading())
    if i==']':
        turtle.pu()
        turtle.setpos(x[len(x)-1],y[len(y)-1])
        turtle.right(turtle.heading())
        turtle.setheading(angle[len(angle)-1])
        x.pop()
        y.pop()
        angle.pop()
        turtle.pd()
役に立ちましたか?

解決

いくつかのアイデア:

  • あなたは決して設定しません angle 新しい角度に(newa)あなたに ]-ハンドラ。
  • コメントによると、あなたの条件は間違っています、 newa>0 角度が正である場合、それを左に回します。
  • 本気ですか rt ネガティブアングルをうまく処理しますか?
  • 使用すると、コードを大いに単純化できます pop 代わりに、国家のタプルまたは息子を押した。
  • のインデックス -1 に等しい len(lst) - 1.

の例 pop-提案:

>>> state = []
>>> angle = 90
>>> posx = 10
>>> posy = 15
>>> state.append((angle, posx, posy))
>>> angle = 40
>>> angle, posx, posy = state.pop()
>>> angle
90
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top