【问题标题】:Generate picture using object implementation of the turtle graphics使用海龟图形的对象实现生成图片
【发布时间】:2026-02-17 14:55:02
【问题描述】:

我正在使用 Python 编程,我正在尝试创建此图像:

使用带有 SVG 渲染的海龟图形的对象实现。这张图片是一场海龟狩猎,几只蓝海龟追逐一只红海龟。我是这样开始的,但我不知道如何继续。

class Turtle:
    def __init__(self):
        self.x = 50
        self.y = 50
        self.heading = 0
        self.lines = []

    def left(self, angle):
        self.heading -= angle

    def right(self, angle):
        self.heading += angle

    def forward(self, d):
        nx = self.x + d * math.cos(self.heading * math.pi / 180)
        ny = self.y + d * math.sin(self.heading * math.pi / 180)
        self.lines.append((self.x, self.y, nx, ny))
        self.x, self.y = nx, ny

如果有人可以帮助我解决这个问题,我会非常高兴。

【问题讨论】:

  • 请不要破坏您的问题。

标签: python image svg graphics turtle-graphics


【解决方案1】:

您的问题不清楚您是以面向对象的方式使用 Python 的海龟库还是实现自己的面向对象的海龟库。如果您正在实现自己的海龟库,则需要一些其他图形库作为基础(例如 tkinter)。还有时间和耐心。

如果您使用 Python 的海龟库,那么定义一个名为 Turtle 的类可能是错误的第一步,因为海龟库已经提供了一个名为 Turtle 的类。而且我在您的Turtle 课程中几乎看不到有用的东西。我能够使用 Python 的海龟库以面向对象的方式在不到 35 行代码中实现以下图像:

基于此,我的建议如下:

  • 选择一个恒定半径并将其与 Python 数学库中的 cossinradians 一起使用,以 18 度 (360 / 20) 的步长绕一个圆圈放置蓝海龟(其色调随角度而变化——您需要进行相位校正。)跳过正弦实际上为零的两个位置。

  • 在 180 度角处,放置一只红海龟。

  • 现在我们需要让海龟移动。您可以使用while True: 循环,最终打破它,也可以使用更面向事件的方法screen.ontimer()。您可以制作自己的海龟列表或使用screen.turtles()

  • 每移动一步,将每只海龟向前移动 1 个像素。对于所有蓝海龟,您还想将它们重新指向红海龟。这样做:

    blue.setheading(blue.towards(red))

    在任何追逐场景中都是你的朋友。

  • 当红海龟的 X 位置超过你的圆的半径一定距离时,你就完成了。

  • 添加任何必要的修饰以使其看起来更好。

一旦您的图形工作正常,将海龟图像导出为 SVG 是一个单独的问题 - 您应该能够在 * 上找到此类示例。

【讨论】: