[英]Drawing polygon patterns using python
I need to draw the image on the right , however my code generates the image on the left .How do I fix this error?我需要在右侧绘制图像,但是我的代码在左侧生成图像。如何解决此错误? I have tried manipulating the s value ,however that messes up the code further.On both the x and y axis , my s is increasing ,however we do not want that .We want the value of s to remain the same uptil a point .我曾尝试操纵 s 值,但是这会进一步弄乱代码。在 x 和 y 轴上,我的 s 都在增加,但是我们不希望那样。我们希望 s 的值保持不变直到某一点。
import turtle
T = turtle.Turtle()
turtle.tracer(0,0)
T.speed(0)
T.pensize(3)
zoom = 40
def drawshape(A,sidelength,s):
for x in range(s):
angle=360/s
A.forward(sidelength)
A.right(angle)
def patternA(T,n,s):
for j in range(0,(n+1) // 2):
T.penup()
for i in range(1,(n+1)//2):
if s <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
T.penup()
s=s-1
s=3
for i in range(((n+1)//2),n+1):
T.penup()
if s <= 1 :
return()
else:
T.penup()
T.setpos((j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
T.penup()
s=s+1
s=6
n=7
patternA(T,n,s)
def patternB(T,n,s):
for j in range(1,((n+1)//2)):
for i in range(1,(n+1)//2):
if s <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
s=s-1
s=3
for i in range(((n+1)//2),n+1):
if s <= 1 :
return()
else:
T.penup()
T.setpos((-j)* zoom, (i) * zoom)
T.pendown()
sidelength=12
drawshape(T,sidelength,s)
s=s+1
s=5
n=7
patternB (T, n, s)
turtle.update()
turtle.done()
Here is my attempt-这是我的尝试-
import turtle
T=turtle.Turtle()
zoom = 50
T.speed(0)
turtle.tracer(0,0)
def drawshape(T,sidelength,s):
for x in range(s):
angle=360/s
T.pendown()
T.forward(sidelength)
T.right(angle)
T.penup()
def dualsaddle(T, n):
T.penup()
for x in range(-n // 2 + 1, n // 2 + 1):
T.setx(x * zoom)
for y in range(-n // 2 + 1, n // 2 + 1):
T.sety(y * zoom)
sidelength=10
if abs(x)==0 or abs(y)==0:
drawshape(T,sidelength,3)
elif abs(x)==1 or abs(y)==1:
drawshape(T,sidelength,4)
elif abs(x)==2 or abs(y)==2:
drawshape(T,sidelength,5)
elif abs(x)==3 or abs(y)==3:
drawshape(T,sidelength,6)
for i in range (7):
dualsaddle(turtle, 7)
turtle.hideturtle()
turtle.update()
turtle.done()
The key to this problem is to take the min()
of the polygon's distance from the X and Y axes.这个问题的关键是取多边形与 X 轴和 Y 轴的距离的min()
。 Here's a solution that's a minor change to my answer to your earlier "Drawing a pattern using turtle" question :这是一个解决方案,它是我对您之前“使用乌龟绘制图案”问题的回答的一个小改动:
from turtle import Screen, Turtle
DISTANCE = 50
def dualsaddle(t, n, minimum=3):
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.pendown()
t.circle(10, steps=minimum + min(abs(x), abs(y)))
t.penup()
screen = Screen()
screen.tracer(False)
turtle = Turtle()
turtle.hideturtle()
turtle.pensize(3)
dualsaddle(turtle, 7)
screen.tracer(True)
screen.exitonclick()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.