乌龟绘制六边形和六边形网格

Turtle drawing a hexagon and hexagon grid

当前代码

#import the turtle modules  
import turtle 
  
#Start a work Screen 
ws=turtle.Screen() 
  
#Define a Turtle Instance 
geekyTurtle=turtle.Turtle() 
  
#executing loop 6 times for 6 sides 
for i in range(6): 
    
  #Move forward by 90 units  
  geekyTurtle.forward(90) 
    
  #Turn left the turtle by 300 degrees 
  geekyTurtle.left(300)

我的目标是制作一个六边形网格图案,但我未能正确完成。我的第一个问题是,如果您 运行 代码得到一个六边形,但顶部是平的,我无法让它的尖角到达顶部。其次,我尝试制作网格但失败了,我不确定为什么我无法复制相同的六边形并将其克隆到另一个旁边。我将或应该有一个我要在下面使用的图像的文件。

我得到的输出:

我试图获得的输出:

  1. 进入循环之前,转 30 度。

geekyTurtle.right(30)

  1. 为了在旁边有它的克隆,只需将乌龟放到新的地方并重新绘制形状即可:

    for i in range(6):
      geekyTurtle.forward(90)
      geekyTurtle.left(300)
    geekyTurtle.up()
    geekyTurtle.goto(90 * 3 ** .5, 0)
    geekyTurtle.down()
    for i in range(6):
      geekyTurtle.forward(90)
      geekyTurtle.left(300)
    

将其放入一个循环中以使其具有两次以上

  1. 您可以使用.up().goto(x, y).down()的思想来绘制网格。

这似乎是一个递归可以以 fractal-like 方式简化的问题。初始六边形的每一边本身就是一个六边形,依此类推,填充可用的 space:

from turtle import Screen, Turtle

SIDE = 75  # pixels

def hexagon(side, depth):
    if depth > 0:
        for _ in range(6):
            turtle.forward(side)
            turtle.right(60)
            hexagon(side, depth - 1)
            turtle.left(120)

screen = Screen()
screen.tracer(False)  # because I have no patience

turtle = Turtle()
turtle.penup()
turtle.width(2)
turtle.sety(-SIDE)  # center hexagons on window
turtle.pendown()
turtle.left(30)  # optional, orient hexagons

hexagon(SIDE, depth=6)  # depth depends on coverage area

turtle.hideturtle()
screen.tracer(True)
screen.exitonclick()