首页 > 解决方案 > 在 Python Turtle 中围绕一个点转动简单的多边形

问题描述

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

下面我正在尝试复制图像。想要复制的图片 在给定三角形和正方形的情况下,我特别需要添加到我的代码中的帮助,以使它们像图片一样向外重复。因为到目前为止三角形和正方形看起来像这样(五边形代码是正确的并且有效)所有帮助表示赞赏。谢谢你。现在的三角形和正方形

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

标签: pythonpolygonturtle-graphicsshapes

解决方案


五边形代码正确且有效

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

也就是说,将绘画作为一个整体来拥抱,而不是试图分而治之。

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

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

在此处输入图像描述


推荐阅读