我一直在尝试对此进行编码,但是它不起作用,我感到困惑。
使用递归绘制“ H树”分形。
H-Tree分形定义如下:
您的函数定义必须具有以下格式: def h_tree(顺序,中心,大小): 哪里: 如上所述,阶次是分形的阶次 center是H树的中心点,格式为[x,y] size是H中每行的长度
这是我的代码:
PUSHER_CLUSTER
答案 0 :(得分:0)
您有一个基本合理的逻辑,虽然这不是我会做的方式,但需要进行一些修补。主要是因为您没有遵循自己的逻辑。您知道h_tree()
将一个位置(一对数字)作为第二个参数,但是您仅传递了一个数字(即使这样,如@SRTHellKitty所述,您也忘记保存get_endpoints()
的结果) 。您还忘记了递归调用将size
减少一半。您错误地计算了两个终点。而且,在draw_turtle()
末尾,您并没有保持乌龟的原始方向,只要您能使它工作,就可以使H数字旋转一半。
下面是已修复的代码-我已将您的Q1代码撤出,因为它与您所问的问题无关:
import turtle
def h_tree(order, center, size):
draw_turtle(center, size)
if order > 0:
ep1, ep2, ep3, ep4 = get_endpoints(center, size)
h_tree(order - 1, (ep1, ep2), size / 2)
h_tree(order - 1, (ep1, ep4), size / 2)
h_tree(order - 1, (ep3, ep2), size / 2)
h_tree(order - 1, (ep3, ep4), size / 2)
def draw_turtle(center, size):
turtle.penup()
turtle.goto(center)
turtle.pendown()
turtle.forward(size / 2) # right side of H
turtle.left(90)
turtle.forward(size / 2)
turtle.right(180)
turtle.forward(size)
turtle.penup()
turtle.goto(center)
turtle.pendown()
turtle.right(90) # left side of H
turtle.forward(size / 2)
turtle.right(90)
turtle.forward(size / 2)
turtle.right(180)
turtle.forward(size)
turtle.right(90) # return turtle to original orientation
def get_endpoints(center, size):
ep1 = center[0] + size / 2
ep2 = center[1] + size / 2
ep3 = center[0] - size / 2
ep4 = center[1] - size / 2
return ep1, ep2, ep3, ep4
def main():
turtle.speed('fastest')
h_tree(2, (0, 0), 300)
turtle.hideturtle()
turtle.done()
main()