python - 在 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()
解决方案
五边形代码正确且有效
我不相信五角大楼的代码是正确的,也不相信你以正确的方式处理这个问题。内部的三个形状应该形成一个等边三角形——你的不是,因为你用眼球而不是计算。与其试图让乌龟处于正确的位置,不如让乌龟沿着这个中心三角形的边的方向向前移动,边画边画多边形。
也就是说,将绘画作为一个整体来拥抱,而不是试图分而治之。
我们需要确保多边形绘制代码在完成后恢复海龟的状态,这样它就可以简单地向前移动到下一个多边形。我们需要明确哪些数字是任意的,哪些是可计算的。尽管原始图表似乎使用至少三个海龟来实现它的结果,但我们将按照您的尝试使用一个:
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()
推荐阅读
- .net - 空引用异常在调试模式下出现,但在发布模式 .NET 中工作正常
- angular - 在 Angular 项目中,我使用了显示密码。当我单击提交时,在检查验证后该图标会下降
- selenium-grid - 范围报告没有给出关于并行执行的正确报告
- android - 当我集成 Paytm 支付网关时,我得到一个“糟糕”屏幕
- python - 或正则表达式中文字字符串的条件
- json - JQ:设置顶层路径
- memory-leaks - 内存泄漏:肯定丢失,也可能丢失
- ios - 无法将“String”类型的值转换为预期的参数类型“UITextRange”
- ember.js - Ember 将值添加到 Django Rest API 中的外键字段
- python - 在python中添加分隔符