如何在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+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告