分形曲线/列维曲线问题

2024-05-14 19:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有分形曲线的问题。我在Python2.7和OSXElCapitan上的3.6上都试过这个。我不能让乌龟动。这是直接从书中摘取的代码。screenshot of turtle not moving设置为0时,根据书中的描述,它应该画一条直线。但它不动。这本书给了我们密码:

from turtle import Turtle

def cCurve(t, x1, y1, x2, y2, level):
    def drawLine(x1, y1, x2, y2):
        t.up()
        t.goto(x1, y1)
        t.down()
        t.goto(x2, y2)

        if level == 0:
            drawLine(x1, y1, x2, y2)
        else:
            xm = (x1 + x2 + y1 - y2) //2
            ym = (x2 + y1 + y2 - x1) //2
            cCurve(t, x1 ,y1 ,xm, ym, level -1)
            cCurve(t, xm, ym, x2, y2, level -1)
def main():
    level = int(input("Enter the level(0 or greater):" ))
    t = Turtle()
    t.hideturtle()
    cCurve(t, 50, -50, 50, 50, level)


main()

Tags: maindeflevel分形x1x2turtlexm
1条回答
网友
1楼 · 发布于 2024-05-14 19:30:43

在讨论了@trincot指出的缩进问题之后,我想证明,在编写这样的程序时,人们和书籍常常会忽略turtle的Vec2D类的价值。尽管Vec2D不是完美的,缺乏一种很好的方法来访问invidual元素并且没有除法,因此您必须使用multipliaion,它可以通过处理点而不是单个的X和Y值来清理代码:

from turtle import Screen, Turtle, Vec2D

X, Y = range(2)

def cCurve(turtle, p1, p2, level):

    def drawLine(turtle, p1, p2):
        turtle.penup()
        turtle.goto(p1)
        turtle.pendown()
        turtle.goto(p2)

    if level == 0:
        drawLine(turtle, p1, p2)
    else:
        s = (p1 + p2) * 0.5  # sum / 2
        d = (p1 - p2) * 0.5  # difference / 2

        m = Vec2D(s[X] + d[Y], s[Y] - d[X])

        cCurve(turtle, p1, m, level - 1)
        cCurve(turtle, m, p2, level - 1)

def main():
    level = int(input("Enter the level (0 or greater): "))

    screen = Screen()

    cCurve(Turtle(visible=False), Vec2D(50, -50), Vec2D(50, 50), level)

    screen.mainloop()

main()

enter image description here

你可以把Vec2D导入那些与海龟没有任何关系的程序。你知道吗

相关问题 更多 >

    热门问题