Python 如何使用海龟制作一个三角形大小不同的六边形星星?这就是我得到的,不确定,有人能帮我吗?

Python 如何使用海龟制作一个三角形大小不同的六边形星星?这就是我得到的,不确定,有人能帮我吗?,python,turtle-graphics,Python,Turtle Graphics,按照标题的要求,问题是:如何使用海龟制作一个三角形大小不同的六边形星星?我看到的问题是,您正在用海龟在一个顶点绘制第一个三角形。画这个三角形很简单,但是你不知道从哪里开始画下一个三角形。在这种情况下,我会改变我的设计,画一个以海龟为中心的三角形。然后,绘制第二个三角形只需在稍微旋转海龟后重新开始: import turtle wn = turtle.Screen() tess = turtle.Turtle() tess.speed(30) def triangle(sz): fo

按照标题的要求,问题是:如何使用海龟制作一个三角形大小不同的六边形星星?

我看到的问题是,您正在用海龟在一个顶点绘制第一个三角形。画这个三角形很简单,但是你不知道从哪里开始画下一个三角形。在这种情况下,我会改变我的设计,画一个以海龟为中心的三角形。然后,绘制第二个三角形只需在稍微旋转海龟后重新开始:

import turtle

wn = turtle.Screen()
tess = turtle.Turtle()
tess.speed(30)


def triangle(sz):
    for i in range(3):
        tess.fd(sz)
        tess.lt(120)

def sixPtdStar(sz):
    triangle(sz)
    tess.lt(90)
    tess.pu()
    tess.fd(80)
    tess.rt(90)
    tess.fd(120)
    tess.pd()
    tess.rt(180)
    triangle(sz)
每当我试图画一个居中的图形时,我都会使用
tess.dot()
作为调试辅助工具,以了解该中心的位置,从而可以直观地检查我是否做对了:

另一种方法,仍然将海龟放在图形的中心,就是将定心工作推入
三角形()
,并保持
sixtdstar()
简单。一种方法是使用turtle自己的
circle()
函数绘制三角形:

from turtle import Screen, Turtle

def triangle(side):
    tess.pendown()

    for _ in range(3):
        tess.forward(side)
        tess.left(120)

    tess.penup()

def sixPtdStar(side):
    height = side * 3**0.5 / 2  # equilateral triangle

    for _ in range(2):
        tess.right(30)
        tess.forward(2 * height / 3)
        tess.left(90 + 60)
        triangle(side)
        tess.right(90 + 60)
        tess.backward(2 * height / 3)
        tess.right(30)

tess = Turtle()
tess.penup()
tess.dot()  # mark the center of our star

sixPtdStar(100)

screen = Screen()
screen.exitonclick()
如果我们专注于使用
circle()
绘制三角形,而不关心将其置于海龟当前位置的中心,我们可以简单地执行以下操作:

def triangle(side):
    height = side * 3**0.5 / 2  # equilateral triangle
    radius = 2 * height / 3

    # center the circle on tess' position
    tess.right(90)
    tess.forward(radius)
    tess.left(90)

    tess.pendown()
    tess.circle(radius, steps=3)
    tess.penup()

    # return tess to where she started
    tess.left(90)
    tess.forward(radius)
    tess.right(90)

def sixPtdStar(side):
     triangle(side)
     tess.right(60)
     triangle(side)
保持与上面相同的
triangle()
,我们将
sixPtdStar()
从绘制两个重叠三角形更改为在一个圆中绘制六个三角形:

def triangle(radius):
    tess.pendown()
    tess.circle(radius, steps=3)
    tess.penup()

def sixPtdStar(side):
    radius = side * 3**0.5 / 3  # equilateral triangle
    triangle(radius)
    tess.circle(radius, extent=60)
    triangle(radius)
或者,如果我们想要一颗特别优雅的星星,请将
radius/3
更改为
radius/2
以获得:

阅读。格式化你的代码。
def sixPtdStar(side):
    radius = side * 3**0.5 / 3  # equilateral triangle

    for _ in range(6):
        triangle(radius / 3)
        tess.circle(radius, extent=60)