我正在尝试编写一个python脚本,它取n,并根据这个顺序绘制一条希尔伯特曲线。我的算法工作得很好,它在更改窗口大小时绘制曲线并重新缩放大小。然而,我的画没有居中,可能会越界。我想用屏幕缩放曲线,而不需要太多的空白空间,也不想让它超出范围
这是我的密码:
import sys
import turtle
from turtle import Turtle, Screen
#Drawing the hilbert curve using recursion.
#Var: turtle if for the Turtle, A is the length of the lines, parity is for inverting the direction, and n is for the order
def hilbert_curve(turtle, A, parity, n):
if n < 1:
return
turtle.left(parity * 90)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.forward(A)
turtle.right(parity * 90)
hilbert_curve(turtle, A, parity, n - 1)
turtle.forward(A)
hilbert_curve(turtle, A, parity, n - 1)
turtle.right(parity * 90)
turtle.forward(A)
hilbert_curve(turtle, A, - parity, n - 1)
turtle.left(parity * 90)
def main():
#Rescale the drawing when changing the window size
def onResize(x=0, y=0):
width = my_win.window_width()
hight = my_win.window_height()
my_win.setworldcoordinates(-width-1, -hight-1, width-1, hight-1)
my_win.ontimer(onResize,100)
#initilize the turtle.
turtle = Turtle()
#initilize the screen.
my_win = Screen()
w = my_win.window_width()
h = my_win.window_height()
A = 20
onResize()
rule = 1
my_win.tracer(False)
if len(sys.argv) < 2:
print("Please declare the order after calling the program name")
return
n = int(sys.argv[1])
hilbert_curve(turtle,A,rule,n)
my_win.update()
my_win.mainloop()
main()
**如果有人能解决我的问题,我将不胜感激谢谢**
不,没有。您的图形是从不缩放的,其大小保持不变。设置缩放代码的
main()
函数是从不调用的,因为它遵循mainloop()
调用,该调用将控制权移交给tkinter事件处理程序:使用事件计时器是解决此问题的错误方法。但是,由于turtle不公开底层tkinter窗口调整大小事件,所以让我们使用这个模型,而不是直接进入tkinter层。我会这样做:
即,无论窗口大小如何,保持恒定的虚拟坐标,并重新绘制曲线以适应当前窗口大小。顺便说一句,didn't I write this Hilbert curve code?一定要把你从哪里弄来的票投上去
相关问题 更多 >
编程相关推荐