タートルグラフィックを使用して、L-Systemコードで記録された状態を復元します
-
26-10-2019 - |
質問
タートルグラフィックスを使用して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
所属していません StackOverflow