Koch 的雪花使用 Turtle

问题描述 投票:0回答:2

我目前正在做一个需要创建科赫雪花的项目。我决定使用乌龟来完成这项任务。用户可以输入一个“命令”来确定三角形的边数。我遇到了一个问题,从像“6”这样的更高阶开始,三角形上的线条变得如此模糊,所以我什至看不到它是否有效。有没有办法来解决这个问题?我的一个解决方案是,如果用户可以放大,他们可能会更清楚地了解细节。

代码:

import turtle
from turtle import \*
from turtle import Screen

t = turtle.Turtle()

turtle.tracer(False)

screen = Screen()

def draw_kochs(length, n):
   if (n == 0):
      t.forward(length)
   else:
      n = n - 1
      length = length / 3
      draw_kochs(length, n)
      t.right(60)
      draw_kochs(length, n)
      t.left(120)
      draw_kochs(length, n)
      t.right(60)
      draw_kochs(length, n)

t.penup()
t.setposition(0, 0)
t.pendown()
t.speed(10)
order = screen.textinput("Order Number", "Please Enter Order Number")
order = int(order)
order = order - 1
for x in range(3):
draw_kochs(200, order)
t.left(120)

input()

我试图在网上找到其他答案,但发现对 turtle 的支持很少。

python turtle-graphics python-turtle fractals
2个回答
0
投票

如果模糊,你应该增加区域的大小。 — 不是通过放大,而是通过

turtle.screensize()
:

设置像素数
import turtle

# Get the current value (in Pixels)
print(turtle.screensize())

=> (300,300)

# Set a higher value:
turtle.screensize(canvwidth=600, canvheight=600, bg="white")

但请注意,要计算更多的像素(一个区域由 x² 计算)会降低执行速度。


0
投票

这在 turtle 中可能很棘手,因为我们想要实现缩放的两个功能,

setworldcoordinates()
screensize()
不能很好地一起玩。下面是一个仅使用
setworldcoordinates()
的简化示例。分形画好后,点击窗口继续放大它的一个角:

from turtle import Screen, Turtle

WIDTH, HEIGHT = 500, 500

def draw_kochs(length, n):
    if n == 0:
        turtle.forward(length)
    else:
        n -= 1
        length /= 3

        draw_kochs(length, n)
        turtle.right(60)
        draw_kochs(length, n)
        turtle.left(120)
        draw_kochs(length, n)
        turtle.right(60)
        draw_kochs(length, n)

adjust = 2

def zoom(x, y):
    global adjust

    adjust += 1
    screen.setworldcoordinates(-WIDTH/adjust, -HEIGHT/adjust, WIDTH/adjust, HEIGHT/adjust)

screen = Screen()
screen.setup(WIDTH, HEIGHT)

order = screen.numinput("Order Number", "Please Enter Order Number:", minval=1, maxval=10)

screen.setworldcoordinates(-WIDTH/adjust, -HEIGHT/adjust, WIDTH/adjust, HEIGHT/adjust)  # initial null change
screen.tracer(False)

turtle = Turtle()
turtle.hideturtle()

for _ in range(3):
    draw_kochs(200 * order, order)
    turtle.left(120)

screen.update()
screen.onclick(zoom)
screen.mainloop()

要在放大的分形中四处移动,我们需要

screensize()
,这又不能很好地与
setworldcoordinates()
一起玩。为了解决这个问题,我们必须实现我们自己的可扩展坐标功能,折腾
setworldcoordinates()
并使用
screensize()
创建一个大的支持图像存储来滚动。

© www.soinside.com 2019 - 2024. All rights reserved.