如何绘制同心六边形?

时间:2016-03-25 19:02:52

标签: python-3.x turtle-graphics

我需要使用Python龟图形随机绘制同心六边形(每组4到10个)(见图)。我可以绘制随机六边形,但不能制作同心六边形:

import turtle
from random import randint

window = turtle.Screen()
window.bgcolor("yellow")
brad= turtle.Turtle()
brad.color("blue")
window.colormode(255)

def drawPoly(sideLen, noOfsides):
    for i in range(noOfsides):
        brad.forward(sideLen)
        brad.left(360/noOfsides)

for i in range(20):
   sideLen = randint(20,150)
   xpos = randint(-200,200)
   ypos = randint(-200,200)
   brad.pensize(randint(1,3))
   brad.pencolor(randint(1,255),randint(1,255),randint(1,255)) 
   brad.penup()
   brad.setpos(xpos,ypos)
   brad.pendown()
   drawPoly(sideLen,6)


window.exitonclick()

以下是image

的链接

如何在六边形内制作六至六次六边形,然后移动到下一个六边形?

1 个答案:

答案 0 :(得分:1)

mcve的概念适用于开发以及在此处发布。从简单的函数或代码块开始,制作同心六边形,而不必担心线条的颜色,粗细或样式。

关于六边形的关键是“半径”(中心到角落)与边缘长度(角落到角落)相同。 (例如,同心五边形更难,需要一些触发。)假设你想在x轴上有两个角。如果中心是x,y,则从x + e开始,y在120的旋转(其中0朝右)。给定xy,半径边长的列表edges以及处于启动状态的海龟t,以下情况应该有效。

for edge in edges:
    t.setpos(x+e, y)
    t.setheading(120)
    t.pendown()
    for i in range(6):
        t.forward(e)
        t.left(60)
    t.penup()

编辑:将setangle替换为setheading,感谢cdlane的评论。