我正在尝试在正方形内绘制点的图案。我已经设法画出了图案,但是在正方形的中间有一个缝隙(由于x坐标的反转而造成)。我该如何纠正该错误?我试图反转范围(而不是x坐标),但是python不接受这种格式。
import turtle
T = turtle.Turtle()
turtle.tracer(0,0)
T.speed(10)
T.pensize(3)
zoom = 40
def verticalSaddle2(T,n,k):
for j in range(((n+1)//2),n+1):
for i in range(1,(n+1)//2):
if k <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k-2
for i in range(((n+1)//2),n+1):
if k <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k+2
k=10
n=7
verticalSaddle2(T,n,k)
def verticalSaddle3(T,n,k):
for j in range(1,((n+1)//2)):
for i in range(1,(n+1)//2):
if k <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k-2
for i in range(((n+1)//2),n+1):
if k <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k+2
k=12
n=7
verticalSaddle3(T, n, k)
turtle.update()
turtle.done()
答案 0 :(得分:0)
您的其中一个函数为负x
绘制图片的左侧部分,另一个函数为正x
为其右侧绘制几乎相同的图片,这两个部分只是另一部分的镜像版本。 x
由j
循环处理。为了无间隙地绘制左右图像,您的两个j
循环应固定为从0
到(n+1)//2
的相同范围。产生的固定代码如下:
import turtle
T = turtle.Turtle()
turtle.tracer(0,0)
T.speed(0.01)
T.pensize(3)
zoom = 40
def verticalSaddle2(T,n,k):
for j in range(0,(n+1) // 2):
for i in range(1,(n+1)//2):
if k <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k-2
for i in range(((n+1)//2),n+1):
if k <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k+2
k=10
n=7
verticalSaddle2(T,n,k)
def verticalSaddle3(T,n,k):
for j in range(0,((n+1)//2)):
for i in range(1,(n+1)//2):
if k <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k-2
for i in range(((n+1)//2),n+1):
if k <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
T.dot(k)
k=k+2
k=12
n=7
verticalSaddle3(T, n, k)
turtle.update()
turtle.done()
结果图像输出如下:
您的代码可以简化为仅具有一个绘制函数,该函数在x
到j
范围内绘制-(n + 1) / 2
((n + 1) / 2
)。 Simplified code is here。
可以简化代码,使其具有如下所示的短代码:
import turtle
T = turtle.Turtle()
turtle.tracer(0,0)
T.pensize(3)
zoom = 40
def saddle(T, n, k):
for j in range(-((n + 1) // 2) + 1, (n + 1) // 2):
for i in range(1, n + 1):
T.penup()
T.setpos(j * zoom, i * zoom)
T.pendown()
T.dot(k - 2 * (min(i - 1, n - i) + (n + 1) // 2 - 1 - abs(j)))
saddle(T, 7, 16)
turtle.update()
turtle.done()
答案 1 :(得分:0)
我相信您正在使这个问题变得更加困难。首先,我将获得代码以简单地绘制均匀点的网格。然后修改代码以根据点在网格中的位置调整大小。像这样:
from turtle import Screen, Turtle
DISTANCE = 40
def saddle(t, n, minimum=1):
assert n % 2 == 1, "n should be odd"
t.penup()
for x in range(-n // 2 + 1, n // 2 + 1):
t.setx(x * DISTANCE)
for y in range(-n // 2 + 1, n // 2 + 1):
t.sety(y * DISTANCE)
t.dot(2 * (minimum + abs(x) + abs(y)))
screen = Screen()
screen.tracer(False)
turtle = Turtle()
turtle.hideturtle()
saddle(turtle, 7)
screen.tracer(True)
screen.exitonclick()
我已经使我的代码对n
坚持使用奇数,否则该模式将不对称。