围绕 Python Turtle 中的一个点转动简单的多边形

Turning simple polygons about a point in Python Turtle

我需要帮助在 Python 海龟中转动多边形(三角形和正方形)以匹配图片。

下面我正在尝试复制图像。 鉴于三角形和正方形让它们像图片一样向外重复,我特别需要帮助添加到我的代码中。因为到目前为止三角形和正方形看起来像这样(五边形代码是正确的并且可以工作)感谢所有帮助。谢谢你。

import turtle 

def polygon(turtle, side, length):
    turtle.color("Blue")
    for i in range(4):
        turtle.backward(length)
        turtle.left(side)
def polygon1(turtle, side1, length):
    turtle.color("Green")
    for i in range(3):
        turtle.left(side1)
        turtle.forward(length)
def polygon2(turtle, side2, length):
    turtle.color("Red")
    for i in range(5):
        turtle.forward(length)
        turtle.left(side2)

def main():
    my_turtle = turtle.Turtle()
    wn = turtle.Screen()
    Bill = turtle.Turtle()
    length = 100
    side = 90
    side1 = 120
    side2 = 72
    Bill.pensize(5)
    Bill.speed(0)

    #Pentagons
    Bill.pu()
    Bill.right(180)
    y = -45
    for i in range(5):
        Bill.pu()
        Bill.goto(60, y)
        Bill.pd()
        polygon2(Bill, side2, length)
        y -= 20

    #Triangle
    Bill.pu()
    Bill.left(240)
    x = 45
    for j in range(5):
        Bill.pu()
        Bill.goto(10, x)
        Bill.pd()
        polygon1(Bill, side1, length)
        x += 20

    #Square
    Bill.pu()
    Bill.left(240)
    b = 6
    for b in range(5):
        Bill.pu()
        Bill.goto(148, b)
        Bill.pd()
        polygon(Bill, side, length)
        b -= 20



    wn.exitonclick()

if __name__ == '__main__':
    main()

pentagon code is correct and works

我不相信五角大楼的代码是正确的,也不认为你以正确的方式处理这个问题。内部的三个形状应该形成一个等边三角形——你的不是,因为你是在观察而不是计算。与其试图让乌龟在正确的位置,不如让乌龟沿着这个中心三角形的边的方向前进,边走边画多边形。

也就是说,将绘图视为一个整体,而不是试图分而治之。

我们需要确保多边形绘制代码在完成后恢复海龟的状态,以便它可以简单地前进到下一个多边形。我们需要明确哪些数字是任意的,哪些是可计算的。虽然原始图表似乎使用至少三只海龟来实现它的结果,但我们将按照您的尝试使用一只海龟:

from turtle import Turtle, Screen

SHAPES = [(5, "Red"), (3, "Green"), (4, "Blue")]

LENGTH = 100
DELTA = 20
REPLICATIONS = 5
THICKNESS = 5

HEIGHT = (3 ** 0.5 / 2) * LENGTH  # assumes 3 shapes, should fix!
DIVISIONS = 360 / len(SHAPES)

def polygon(turtle, sides, color):
    turtle.color(color)
    turtle.left(90)
    turtle.forward(LENGTH / 2)

    for _ in range(sides):
        turtle.right(360 / sides)
        turtle.forward(LENGTH)

    turtle.backward(LENGTH / 2)  # restore turtle to original state
    turtle.right(90)

wn = Screen()

bill = Turtle()
bill.speed('fastest')
bill.pensize(THICKNESS)

bill.penup()

for offset, (sides, color) in enumerate(SHAPES):

    bill.setheading(-DIVISIONS * offset - 90)
    bill.forward(HEIGHT / 3)  # assumes 3 shapes, should fix!

    for _ in range(REPLICATIONS):
        bill.pendown()
        polygon(bill, sides, color)
        bill.penup()
        bill.forward(DELTA)

    bill.home()

wn.exitonclick()