如何在Python中创建自定义海龟形状?


Python 的Turtle库用于生成2D图形和动画。它具有非常简单的界面,我们可以用它在屏幕上创建形状和图案。它带有一些内置形状,例如正方形、圆形、三角形等。但是,我们甚至可以借助 Turtle 创建自己的形状。在本文中,我们将了解如何在python中创建自定义海龟形状。

在继续创建自定义形状之前,我们需要在系统上安装 Turtle,这可以通过简单地使用以下命令来完成:

pip install turtle

我们都需要了解 Turtle 的某些函数,这些函数将用于帮助创建自定义形状,它们如下

  • register_shape()  它用于在 Turtle 中注册新的自定义形状。它接收两个参数,分别是形状的名称(作为字符串)和一个 (x, y) 坐标对的元组,表示形状的顶点。

  • .shape()  成功注册形状后,使用 register_shape() 方法,可以通过使用 .shape() 函数将其用作形状,并且必须提供一个字符串参数,即形状的名称。

  • .color()  此方法仅用于设置图形的颜色,它可以接收多个参数,所有这些参数都与颜色相关。参数可以是颜色的直接名称,例如红色、蓝色、绿色等,也可以是颜色的十六进制代码,甚至可以是 RGB 值,这意味着三个整数格式的参数。

简而言之,register_shape() 用于创建和注册形状,而 .shape() 用于实现注册的形状。

1. 正方形

我们首先了解如何手动创建一个简单的正方形,这将需要上面提到的函数。

示例

import turtle

# create turtle object
t = turtle.Turtle()

# define shape vertices
square_shape = ((-50, -50), (-50, 50), (50, 50), (50, -50))

# register the shape
turtle.register_shape("square", square_shape)

# use the shape
t.shape("square")
t.color("green")

# This functions is important to keep the turtle window on
turtle.done()

输出

2. 星星

星星也是一个简单的形状,其点从中心延伸。它们通常用作装饰元素,但在数学中也可能有科学意义。它只需要仔细声明坐标,而其余代码将与上面相同。

示例

import turtle

t = turtle.Turtle()

star_shape = ((0, 50), (-14, 16), (-50, 16), (-23, -12), (-35, -46),
         (0, -24), (35, -46), (23, -12), (50, 16), (14, 16))

turtle.register_shape("star", star_shape)

t.shape("star")
t.color("green")

turtle.done()

输出

3. 六边形

六边形是一个 6 边形,有 6 个角。它存在于蜂窝或化学苯环中。这里也需要仔细更改和提及坐标。

示例

import turtle

t = turtle.Turtle()
hexagon_shape = ((-50, 0), (-25, 43.3), (25, 43.3), (50, 0), (25, -43.3), (-25, -43.3))

turtle.register_shape("hexagon", hexagon_shape)

t.shape("hexagon")
t.color("red")

turtle.done()

输出

4. 十字

十字符号通常用于医疗机构,如药剂师和医院。它也是红十字会的标志,在危机和紧急情况下提供援助。十字架有时也称为“加号”。

示例

import turtle

t = turtle.Turtle()
Cross_shape = ((-50, 0), (-15, 0), (-15, -50), (15, -50), (15, 0), (50, 0), (50, 50),
         (15, 50), (15, 100), (-15, 100), (-15, 50), (-50, 50))

turtle.register_shape("Cross", Cross_shape)

t.shape("Cross")
t.color("red")

turtle.done()

输出

5. 立方体

立方体是一种 3D 形状,由 6 个正方形面组成,这些面以直角相交,也称为正六面体。立方体的每个面在形状和大小上都是全等的,所有边的长度都相同。由于其形状和特性,立方体在数学、物理和工程学中得到广泛研究。虽然我们的屏幕显示 2D 图像,但我们试图创建 3D 可视化效果或赋予 2D 图形 3 维外观。在此示例中,创建是借助海龟动画完成的,但是动画已通过使用 hideturtle() 和 tracer(0) 函数关闭,并且可以通过修改这些语句来查看动画。动画在后台完成,屏幕在完成时更新。

示例

import turtle

t = turtle.Turtle()
t.hideturtle()
turtle.tracer(0)

# Draw the front side of the square
t.begin_fill()
t.color("red")
t.goto(100, 0)
t.goto(100, 100)
t.goto(0, 100)
t.goto(0, 0)
t.end_fill()

# Draw the right side of the square
t.begin_fill()
t.color("orange")
t.goto(100, 0)
t.goto(120, 20)
t.goto(120, 120)
t.goto(100, 100)
t.end_fill()

# Draw the top side of the square
t.begin_fill()
t.color("yellow")
t.goto(0, 100)
t.goto(20, 120)
t.goto(120, 120)
t.goto(100, 100)
t.end_fill()

turtle.update()
turtle.done()

输出

6. 科赫雪花

科赫雪花是一种分形曲线。它们是通过使用等边三角形将其每条边分成相等的部分,然后用形成等边凸起或突起的 2 个部分替换其中间部分来创建的。此过程将针对先前步骤中创建的所有 4 条线段继续进行。这里也需要动画,为了简单起见,它被隐藏起来,可以通过修改前面示例中提到的函数来启用它。

示例

import turtle

t = turtle.Turtle()
# Hide turtle object
t.hideturtle()
turtle.tracer(0)

# Draw the Koch snowflake
def koch_snowflake(length, depth):
    if depth == 0:
        t.forward(length)
    else:
        for angle in [60, -120, 60, 0]:
            koch_snowflake(length / 3, depth - 1)
            t.left(angle)

# Set turtle position and angle
t.penup()
t.goto(-150, 150)
t.pendown()
t.setheading(0)

# Draw the Koch snowflake
t.color("blue")
t.begin_fill()
for i in range(3):
    koch_snowflake(300, 4)
    t.right(120)
t.end_fill()

turtle.done()

输出

结论

海龟库非常适合创建视觉图形,并为您的项目增加个性化水平。通过使用 shape_register() 函数,我们可以创建任何类型的形状,并使用 .shape() 函数来实现/绘制形状。无论形状是否为人类所知,都可以创建,而所需的只是坐标。创建自定义形状是一项简单的任务,只需要一点创造力和编程知识。我们已经实现了多种类型的形状,从简单的正方形到 3D 立方体和科赫雪花。

更新于: 2023年8月18日

2K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告