如何使用乌龟将图形放在圆圈内?

How to put the figure inside a circle using turtle?

我用乌龟得到了一个简单的图形。但问题是我不知道如何把那个数字放在圆圈里。 代码:

import turtle

painter = turtle.Turtle()
painter.pencolor("blue")
for i in range(50):
    painter.forward(100)
    painter.left(123*2)

painter.circle(70)
turtle.done()

您需要将乌龟移动到正确的起始位置。注意那不是圆的中心!它从最右边的位置开始画圆——也就是说,如果你想在 (0,0) 附近画一个半径为 70 的圆,然后移动到 (70,0),例如:

painter.penup()
painter.goto(70,0)
painter.pendown()
painter.circle(70)

仅供参考:我无法立即弄清楚您绘图的中心位置,但我怀疑它不在 (0,0) 处。在所有情况下,您都应该将海龟放在形状中心的右侧,偏移圆的半径,使圆围绕它。

我脑子里有一点三角学,我算出了角度。不确定我的半径是否正确。理想情况下改为计算中心的坐标,但快速而肮脏的解决方案是:

import turtle

painter = turtle.Turtle()
painter.pencolor("blue")
for i in range(50):
    painter.forward(100)
    painter.left(123*2)

painter.right(123)

painter.right(90)
painter.penup()
painter.forward(10)
painter.left(90)
painter.pendown()

painter.circle(70)
turtle.done()

另一种方法是对任意图像的位置进行平均,然后使用该平均值作为周围圆的中心:

from turtle import Screen, Turtle, Vec2D

CIRCLE_RADIUS = 70
POLYGON_LENGTH = 100
POINTS = 50

screen = Screen()
painter = Turtle()
painter.speed('fastest')

painter.pencolor("blue")

total = Vec2D(0, 0)

for _ in range(POINTS):
    painter.forward(POLYGON_LENGTH)
    total += painter.position()
    painter.left(246)

x, y = total * (1.0 / POINTS)  # Vec2D can multiply by scalar but not divide

painter.penup()
painter.goto(x, y - CIRCLE_RADIUS)
painter.setheading(0)
painter.pendown()

painter.circle(CIRCLE_RADIUS)

screen.exitonclick()