python - 使用python绘制多边形图案
问题描述
我需要在右侧绘制图像,但是我的代码在左侧生成图像。如何解决此错误?我已经尝试过操纵 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()
解决方案
这个问题的关键是取min()
多边形到 X 和 Y 轴的距离。这是一个解决方案,它对我对您之前的“使用海龟绘制图案”问题的回答进行了微小的更改:
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()
推荐阅读
- html - 剃刀,两种形式,相同的领域
- python - 使用 Python 和 gmail API,我如何发送带有多个附件的消息?
- saml - 我可以从 ADFS saml 联合元数据文件中获取 IdP 颁发者 URI 和其他信息吗?
- c# - Linq/Entity Framework 查询无法识别我的所有范围变量
- javascript - 在按钮单击时将字符串插入 div 并在下次单击之前将其清除
- algorithm - 对大数组进行排序,保留一些元素(每种语言)
- javascript - 如何按 id 打印所有元素(JS,PHP)
- c# - SRP 和类内的附加逻辑
- swift - Swift 默认重载不可用 - 找不到 SCNReferenceNode(named: )
- user-interface - 如何将屏幕的一部分“流式传输”到另一部分