我正在用python绘制分形树,这是我的方法(有效):
def fractal(length):
if lenght < 1:
return
else:
turtle.forward(length)
turtle.left(30)
fractal(length*0.67)
turtle.right(60)
fractal(length*0.67)
turtle.left(30)
turtle.backward(length)
现在,我正在尝试在一个类中实现此功能,但是我不知道该如何使用turtle命令执行此操作。
我是编码的新手,所以请不要为我的代码太难判断。
我尝试过这样的事情:
class fractalTree():
from turtle import *
def __init__(self, angle, factor):
self.angle = angle
self.factor = factor
def fractal(self, length):
if length < 1:
return
else:
self.turtle.forward(length)
self.turtle.left(self.angle)
fractal(length * self.factor)
self.turtle.right(self.angle * 2)
fractal(length * self.factor)
self.turtle.left(self.angle)
self.turtle.backward(length)
test = fractalTree(14, 2/3)
test.fractal(100)
答案 0 :(得分:1)
有几种方法可以解决此问题。您的自定义类可以包含一只乌龟:
from turtle import Screen, Turtle
class fractalTree():
def __init__(self, angle, factor):
self.angle = angle
self.factor = factor
self.turtle = Turtle()
def fractal(self, length):
if length < 1:
return
self.turtle.forward(length)
self.turtle.left(self.angle)
self.fractal(length * self.factor)
self.turtle.right(self.angle * 2)
self.fractal(length * self.factor)
self.turtle.left(self.angle)
self.turtle.backward(length)
screen = Screen()
screen.mode('Logo') # being lazy, make the tree upright
test = fractalTree(30, 2 / 3)
screen.tracer(False)
test.fractal(100)
screen.tracer(True)
screen.exitonclick()
或者,您的自定义类可能成为乌龟:
class fractalTree(Turtle):
def __init__(self, angle, factor):
super().__init__()
self.angle = angle
self.factor = factor
def fractal(self, length):
if length < 1:
return
self.forward(length)
self.left(self.angle)
self.fractal(length * self.factor)
self.right(self.angle * 2)
self.fractal(length * self.factor)
self.left(self.angle)
self.backward(length)
或者,您可以按照自己的方式做,让自定义类只使用乌龟。