首页 > 解决方案 > 使用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()

标签: pythonpolygonturtle-graphics

解决方案


这个问题的关键是取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()

在此处输入图像描述


推荐阅读