繁体   English   中英

使用python绘制多边形图案

[英]Drawing polygon patterns using 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()

这是我的尝试-

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()

这个问题的关键是取多边形与 X 轴和 Y 轴的距离的min() 这是一个解决方案,它是对您之前“使用乌龟绘制图案”问题的回答的一个小改动

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM