使用python绘制多边形图案

问题描述

我需要在右侧绘制图像,但是我的代码在左侧生成图像。如何解决错误?我试图操纵s的值,但是这又使代码更加混乱。在x和y轴上,我的s都在增加,但是我们不希望这样。我们希望s的值保持相同直到一个点。

f()

解决方法

这是我的尝试-

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,3)
            elif abs(x)==1 or abs(y)==1:
                drawshape(T,4)
            elif abs(x)==2 or abs(y)==2:
                drawshape(T,5)
            elif abs(x)==3 or abs(y)==3:
                drawshape(T,6)


for i in range (7):

    dualsaddle(turtle,7)


turtle.hideturtle()
turtle.update()
turtle.done()
,

此问题的关键是取多边形与X和Y轴的距离的min()。这是您之前的minor change to my answer"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()

enter image description here