---
# System prepended metadata

title: 【數學理論】 07. 毛巾挑戰的終極解法—拓撲學 (Topology)
tags: [【數學理論】]

---

---
title: 【數學理論】 07. 毛巾挑戰的終極解法—拓撲學 (Topology)
tags:
  - 【數學理論】
url: https://hackmd.io/wcTj6mztR7K-q-_Tpnb7Tg
lastSync: 2025-05-25T08:45:51.812Z
hackmd:
  url: https://hackmd.io/wcTj6mztR7K-q-_Tpnb7Tg
  title: 【數學理論】 07. 毛巾挑戰的終極解法—拓撲學 (Topology)
  lastSync: 2025-05-25T08:52:03.477Z
---
毛巾挑戰的終極解法
===
<font size=4><font color=gray>拓撲學 (Topology)</font><br></font><br>
---

<!-- 20250524 -->

按照慣例，開頭先來說一個故事。

<br>

前陣子偶然在網路上刷到國外很紅的「**毛巾挑戰**」

<br>

不囉嗦，先來看看挑戰內容是什麼。


{%youtube lJd0a_lAV4s %}


<br>

所以我們可以看到，毛巾挑戰的內容是：
- 兩個人雙手分別握住毛巾兩端，並且兩條毛巾互相扣住。
- 在手不放開毛巾的情況下，能否讓兩個人分開？

<br>

起初我看到這個挑戰的第一直覺是認為**絕對不可能成功**，但隨著越來越多挑戰成功的影片，抱持著一絲懷疑的同時，也開始漸漸相信其實說不定這是真的？

<br>

對於這種討論幾何、扭結等問題，只能搬出我認為數學當中最難的**拓撲學 (Topology)**


<br>

## 拓撲學 (Topology)

**拓撲學**主要是一門研究在拓撲空間內，物體連續變化(例如拉伸、扭轉，但並非剪斷、黏貼)下維持不變的學科。其中還可以細分成以下幾個分支：

>[!Important] **一般拓樸學（點集拓樸學）**
研究拓樸空間的基本概念和性質，例如連續性、緊緻性和連通性等。它為其他拓樸學分支提供了基礎，涉及對開集、閉集、鄰域等概念的研究。

>[!Important] **代數拓樸學**
利用抽象代數的方法研究拓樸空間，旨在通過代數不變量（如同調群、同倫群）來分類和分析拓樸空間的性質。其目標是尋找代數不變量，以分類在同胚意義下的拓樸空間。

>[!Important] **微分拓樸學**
研究具有光滑結構的流形上的可微函數，關注微分結構與拓樸性質之間的關係。它與微分幾何密切相關，主要研究在微分流形上的可微函數及其應用。

>[!Important] **幾何拓樸學**
主要研究低維流形及其與幾何的互動，尤其關注三維和四維空間中的拓樸性質。它透過幾何方法研究拓樸空間的性質，是低維流形研究的核心領域之一。

<br>

記得高中的數學老師曾說過：「如果學會了拓樸學就能成為數學大師。」

<br>

當時對於數學有濃厚興趣的我來說，宛如化身成**數學界真新鎮的小智**~~障~~，踏上**目標是成為數學大師**之路。

<br>

然而很快我就被現實打臉了，因為以下兩個原因：

1. 我的幾何學很爛。
2. 拓樸學非常的**抽象**。

<br>

舉例來說，你能相信在拓樸的世界裡**一個馬克杯跟一個甜甜圈**是一樣的嗎？

<br>

如果你跟我一樣不相信、不知道這到底是在公三X的話，那恭喜你我們是同類人。

<br>

但如果你深信不疑，甚至去咖啡廳時會跟店員要甜甜圈裝咖啡，然後津津樂道的開始啃馬克杯，那你肯定有成為**拓樸學家**的資質。

<br>


<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/01.jpg" alt="圖片描述" style="display: block; margin: 0 auto;" width="600">



> <font size=1><font color=gray>photo credit by: https://www.facebook.com/share/p/15rExYF7ZD/</font></font>

<br>

事實上，**一個馬克杯跟一個甜甜圈**在拓樸學家眼裡確實是一樣的，因為在拓樸學當中，這兩個物體的形狀是同胚（Homeomorphism）。

---

### 同胚（Homeomorphism）

<br>

**同胚**是拓樸學中的一個基本概念，用來描述兩個拓樸空間在拓樸結構上的等價性。直觀上，同胚兩個空間在拓樸性質上是相同的，只是形狀可能不同。

<br>

首先我們先來看看為甚麼**一個馬克杯跟一個甜甜圈是一樣的**。

<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/02.gif" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">



> <font size=1><font color=gray>photo credit by: 由 Lucas Vieira - 自己的作品, 公有領域, https://commons.wikimedia.org/w/index.php?curid=1236079</font></font>

<br>

上面這個動畫可以看到馬克杯跟甜甜圈可以互相變換。

<br>

下面我們多舉一些例子：

>[!Tip] **例如：**
> - **一個咖啡杯和一個甜甜圈（三維環面）** 在拓樸學上是同胚的，因為它們都具有一個空洞，可以通過變形將它們轉換成彼此。
> - **一個圓和一個橢圓**在拓樸學上是同胚的，因為可以通過拉伸將**圓**變成**橢圓**。
> - **一條橡皮筋和一條直線**在拓樸學上是同胚的，因為**橡皮筋**可以拉直成**一條直線**。
> - **一顆圓球和一個盤子**在拓樸學上是同胚的，因為**圓球**可以壓扁成**一個盤子**。

**同胚**可以看作是將一個物體**拉伸**、**扭曲**或**彎曲**成另一個物體，但不允許**剪切**或**黏貼**。這種情況叫做**可逆的連續變形**。

<br>

>[!Note] **可逆的連續變形（Homotopy）**
>**可逆連續變形**是拓撲學中的一個核心概念，是指在破壞與重組結構的情況下，通過一系列連續變化將一個拓撲空間變為另一個拓撲空間。如果兩個空間之間存在這種變形，它們被稱為同倫等價。

<br>

另外**同胚**具有以下的定義，對於這篇專欄不是太重要，只要知道有這個概念就好。

<br>


>[!Note] **同胚**  
設 $X$ 和 $Y$ 為兩個拓樸空間。如果存在一個函數  
$$f: X \to Y$$  
滿足以下條件，則稱 $f$ 是一個**同胚**，並且 $X$ 和 $Y$ 是**同胚的**（Homeomorphic）：
>1. **連續性**：$f$ 是連續函數。
>2. **雙射性**：$f$ 是一個雙射，即 $f$ 是一一對應且滿射的函數。
>3. **逆連續性**：$f^{-1}: Y \to X$ 也是連續的。

如果 $f$ 滿足這三個條件，就可以說 $X$ 和 $Y$ 的拓樸結構完全相同。

<br>

以上定義參考即可。現在我們了解了拓樸學中兩個重要的概念：**同胚**以及**可逆的連續變形**，而且他們的關係是：

$$同胚 \subset 可逆的連續變形$$

也就是只有**同胚**的物體才能進行**可逆的連續變形**，然而可以進行**可逆的連續變形**的物體不一定是**同胚**。

<br>

---

### 拓樸結構分析

接下來我們就可以針對毛巾挑戰進行拓樸結構的分析了。

<br>

首先對兩個正在進行毛巾挑戰的人進行簡化的數學建模，我們可以把**兩個人的手臂+毛巾當作是環**，而**其餘部分就簡化成一根直線**，於是就可以利用以下程式進行建模。

:::spoiler **點擊查看程式碼**
```python=
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 定義參數
t = np.linspace(0, 2*np.pi, 200)
radius = 1.0

# 直線1與直線2的座標
z = np.linspace(-2, 2, 100)
x_line1 = np.zeros_like(z)
y_line1 = np.zeros_like(z)
z_line1 = z

x_line2 = np.ones_like(z) * 2
y_line2 = np.zeros_like(z)
z_line2 = z

# 環1的參數方程（躺在xz平面上）
x_ring1 = radius * np.cos(t)
y_ring1 = np.zeros_like(t)
z_ring1 = radius * np.sin(t)

# 環2的參數方程（垂直於環1）
x_ring2 = radius + radius * np.cos(t)/2
y_ring2 = radius * np.sin(t)
z_ring2 = radius * np.cos(t)/2

# 建立圖形
fig = plt.figure(figsize=(12, 10))
ax = fig.add_subplot(111, projection='3d')

# 繪製直線
ax.plot(x_line1, y_line1, z_line1, 'b-', linewidth=4, label='Body_1')
ax.plot(x_line2, y_line2, z_line2, 'g-', linewidth=4, label='Body_2')

# 分段繪製環1以創建深度效果
for i in range(len(t)-1):
    if abs(y_ring2[i]) < radius/2 and x_ring1[i] > 0:
        color1 = 'lightcoral'  # 被環2穿過的部分用淺色
    else:
        color1 = 'blue'
    ax.plot(x_ring1[i:i+2], y_ring1[i:i+2], z_ring1[i:i+2], 
            color=color1, linewidth=4)

# 分段繪製環2以創建深度效果
for i in range(len(t)-1):
    if abs(y_ring2[i]-0.8*radius) < radius/2 and x_ring1[i] > 0:
        color2 = 'lightcoral'  # 被環1穿過的部分用淺色
    else:
        color2 = 'green'
    ax.plot(x_ring2[i:i+2], y_ring2[i:i+2], z_ring2[i:i+2], 
            color=color2, linewidth=4)

# 設定視圖範圍
ax.set_xlim(-1.5, 2.5)
ax.set_ylim(-1.5, 1.5)
ax.set_zlim(-1.5, 1.5)

# 設定比例相等
ax.set_box_aspect([4, 3, 3])

# 調整視角以更好地展示環的相互穿過
ax.view_init(elev=20, azim=45)

# 添加標籤和標題
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_zlabel('Z-axis')
ax.legend()
plt.title('Towel Challenge Modelling')

plt.show()
```
:::

執行以上程式就可以得到以下輸出：

<br>

<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/03.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600">

其中可以看到，我特別將兩個環相互扣著的部分用不同顏色標記出來以便展示。

<br>

接下來為了方便分析拓樸結構，我們做一些簡化。我們都知道線段是可以伸縮的，所以在環上的線段(也就是人的身體的部分)收縮到環上，變成下圖。


<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/04.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="600">

<br>

我們會發現，原本的結構被簡化成兩個環了，而且這個簡化方式是可逆的連續變形，也就是沒有破壞、重組其結構的變形。<font color=red>**但是！這並不代表變形前後的結構是同胚的哦！**</font>

<br>

現在我們有兩個互相扣著的環了，而事實上這種類型的拓樸結構有一個特別的名稱**霍普夫連結**。

<br>

>[!Note] **霍普夫連結 (Hopf Link)**
> **霍普夫連結**是由兩個閉環組成的拓撲結構，其特點是兩個環互相穿過一次。

<br>

另外，當兩個環沒有相互扣著，這種類型的拓樸結構也有一個特別的名稱叫**平凡連結**。

<br>

>[!Note] **平凡連結 (Unlink)**
> **平凡連結**也是由兩個閉環組成的拓撲結構，但是兩個環並沒有互相穿過。


<br>

有了這些概念，要證明毛巾挑戰是不是真的可以挑戰成功就簡單了。下面來說說我的證明思路：

<br>

>[!Tip] **證明思路**
>**1.** 因為在挑戰開始前(兩個人還沒分開)的狀態可以被簡化成**霍普夫連結**
>**2.** 可以用 **1.** 的簡化過程，將挑戰成功後(兩個人分開了)的狀態簡化成**平凡連結**
>**3.** 所以只要我們能夠證明**霍普夫連結**跟**平凡連結**是同胚
>**4.** 就代表**霍普夫連結**跟**平凡連結**可以進行可逆的連續變形
>**5.** 可以進行**可逆的連續變形**代表**挑戰就可以成功**

<br>

我相信聰明的你一定看出這個證明思路的重點在於 **3.**，所以接下來就讓我們來證明**霍普夫連結**跟**平凡連結**是不是同胚。


---

## **證明**

<br>

首先對於繩結類的拓樸，有發展出另外一套理論叫做**扭結理論 (Knot Theory)**，其中有將這些扭結給分門別類，而其中一種分類方式就是利用連結 (Link)。

<br>

鏈結（link）是指兩個或多個閉合曲線（通常是圓環）在三維空間中的互相纏繞方式，各種連結鏈結可能有不同連結數量，這個數量就被稱做是連結數 (Linking Number)。



>[!Note] **連結數 (Linking Number)**
>若有兩條閉曲線 $C_1$ 和 $C_2$，其**連結數**可以利用**高斯連結數的積分公式**計算：
$$
Lk(C_1, C_2) = \frac{1}{4\pi} \int_{C_1} \int_{C_2} \frac{\mathbf{r}_1 - \mathbf{r}_2}{\|\mathbf{r}_1 - \mathbf{r}_2\|^3} \cdot (\mathrm{d}\mathbf{r}_1 \times \mathrm{d}\mathbf{r}_2)
$$
其中：$\mathbf{r}_1$ 和 $\mathbf{r}_2$ 是分別在兩個環上移動的點的位置向量。

>這個積分公式是雙重積分，意味著：
>
>1. $\mathbf{r}_1$ 遍歷第一個環上的所有點
>2. $\mathbf{r}_2$ 遍歷第二個環上的所有點
>3. 對於每一對點，計算它們的相互影響的大小
>
>而 $\mathrm{d}\mathbf{r}_1 和 \mathrm{d}\mathbf{r}_2$ 是這些點對應的切向量（表示曲線在該點的方向）。
這個公式的物理意義可以理解為：
>
>計算兩個環上所有點對之間的「相互作用」
$(\mathbf{r}_1 - \mathbf{r}_2)$ 表示兩點之間的位置差
$\|\mathbf{r}_1 - \mathbf{r}_2\|^3$ 在分母上類似於重力或電場的平方反比定律
$\mathrm{d}\mathbf{r}_1 \times \mathrm{d}\mathbf{r}_2$ 考慮了兩條曲線在這些點的相對方向



<br>


連結數定義的公式看起來有點複雜，但其實有個更直觀的計算方式：

<br>

>[!Tip] **計算連結數**
>1. **選擇投影平面：** 將兩個閉合曲線投影到某個平面上，使它們的交叉點清晰可見，並且設定環旋轉的方向。
>2. **標記交叉點方向：** 在每個交叉點上，根據右手規則標記正負號。
>3. **計算總和：** 將所有交叉點的正負號相加，得到的總和的一半即為鏈結數。


<br>

接下來我們分別計算**霍夫普連結**以及**平凡鏈結**的連結數看看。

---

### 1. **霍夫普連結的連結數**

首先將**霍夫普連結**投影到 $xy$ 平面上，接著設定兩個環都是順時針轉：

<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/05.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">

<br>

>也可以逆時針轉，只要兩個環的方向一致即可。給予兩個環一致的定向（比如都是逆時針）是為了確保連結數的計算是有意義且一致。如果不給定一致的定向，同一個霍夫連結可能得到不同的連結數。且當我們改變其中一個環的定向時，連結數的符號會改變。

<br>

接著標記交叉點方向。因為我們可以看到，右邊<font color=blue>**藍色的環**</font>從下面往上穿過左邊<font color=green>**綠色的環**</font>，共有兩個交叉點，我們將上面的交叉點標記成 <font color=red>**A點**</font>，下面的交叉點標記成 <font color=red>**B點**</font>。

<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/06.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">


<br>

接著我們先放大來看 <font color=red>**A點**</font>，可以看到這個交叉點是<font color=blue>**藍色的環**</font>在上，<font color=green>**綠色的環**</font>在下，而這邊有箭頭方向，我們可以發現，<font color=blue>**藍色的箭頭**</font>要**往順時針方向**才會跟<font color=green>**綠色的箭頭**</font>同方向。因為是**往順時針方向**，根據右手定則是遠離觀察者，標記為 $-1$。

<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/07.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">


<br>

接著我們先放大再來看 <font color=red>**B點**</font>，可以看到這個交叉點是<font color=green>**綠色的環**</font>在上，<font color=blue>**藍色的環**</font>在下，而這邊的箭頭方向可以發現，<font color=green>**綠色的箭頭**</font>也是要**往順時針方向**才會跟<font color=blue>**藍色的箭頭**</font>同方向。因為是**往順時針方向**，根據右手定則是遠離觀察者，標記為 $-1$。


<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/08.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">

<br>

最後計算總和，因為兩個交叉點的值都是 $-1$ ，所以計算結果為

$$
Lk(C_1, C_2) = \frac{1}{2} \cdot [(-1) + (-1)] = -1
$$

<br>

所以**霍夫普連結**的連結數等於 $-1$。


---

### 2. **平凡連結的連結數**

接著我們再將**平凡連結**投影到 $xy$ 平面上，且一樣設定兩個環都是順時針轉：


<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/09.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">

>注意這邊兩個圓圈只是**重疊**哦！

<br>

接著標記交叉點方向。因為我們可以看到，右邊<font color=blue>**藍色的環**</font>重疊在<font color=green>**綠色的環**</font>上方，共有兩個交叉點，為了跟**霍夫普連結**有所區隔，我們將上面的交叉點標記成 <font color=red>**C點**</font>，下面的交叉點標記成 <font color=red>**D點**</font>。


<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/10.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">

<br>

接著我們先放大來看 <font color=red>**C點**</font>，可以看到這個交叉點是<font color=blue>**藍色的環**</font>在上，<font color=green>**綠色的環**</font>在下，而這邊有箭頭方向，我們可以發現，<font color=blue>**藍色的箭頭**</font>要**往順時針方向**才會跟<font color=green>**綠色的箭頭**</font>同方向。因為是**往順時針方向**，根據右手定則是遠離觀察者，標記為 $-1$。

<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/11.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">


<br>

接著我們先放大再來看 <font color=red>**D點**</font>，可以看到這個交叉點是<font color=blue>**藍色的環**</font>在上，<font color=green>**綠色的環**</font>在下，而這邊有箭頭方向，我們可以發現，<font color=blue>**藍色的箭頭**</font>要**往逆時針方向**才會跟<font color=green>**綠色的箭頭**</font>同方向。因為是**往逆時針方向**，根據右手定則是靠近觀察者，標記為 $+1$。


<img src="https://raw.githubusercontent.com/lewisjjj800soic/HackMD-images-backup/main/Mathematic-Theorems/07/12.png" alt="圖片描述" style="display: block; margin: 0 auto;" width="500">

<br>

最後計算總和，因為交叉點的值分別是 $-1$ 以及 $+1$ ，所以計算結果為

$$
Lk(C_1, C_2) = \frac{1}{2} \cdot [(-1) + (+1)] = 0
$$

<br>

所以**平凡連結**的連結數等於 $0$。


<br>

>[!Note] 註
如果你的數感夠敏銳的話，會發現其實在計算連結數時，透過「箭頭方向與順逆時針」搭配右手定則得判斷方法，就是高中時學過的**外積**，而當你回頭看連結數的定義時也會發現裡面有外積的概念 $(\mathrm{d}\mathbf{r}_1 \times \mathrm{d}\mathbf{r}_2)$ 。


<br>


現在我們已經個別計算出兩個連結的連結數，**霍普夫連結**的連結數等於 $-1$ ，表示兩個環彼此穿過一次；**平凡連結**的連結數等於 $0$ ，表示兩個環彼此之間並無相互穿過。

<br>

在拓撲學中，**連結數**是用來描述兩個閉曲線之間纏繞次數的重要**拓樸不變量**。

---

### 3. 拓撲不變量

<br>

什麼是拓撲不變量？

<br>

>[!Note] **拓樸不變量（Topological Invariant）**
**拓樸不變量**是拓樸學中的一個性質，能夠在拓樸空間進行連續變形（如拉伸或彎曲，但不包括撕裂或切割）時保持不變。這些不變量用於分類和區分不同的拓樸空間。常見的拓樸不變量包括：
>
> - **基本群（Fundamental Group）**：描述空間中環路的同倫類。
> - **歐拉示性數（Euler Characteristic）**：與空間的幾何結構相關。
> - **鏈結數（Linking Number）**：用於描述兩個環的纏繞關係。


<br>


這時你會發現，**鏈結數**也是拓樸不變量，這代表**只要不剪斷環或破壞其結構，連結數 $Lk(C_1, C_2)$ 就不會改變**。

<br>

這意味著，「連結數為 $-1$ 的**霍普夫連結**」無法利用不剪斷環或破壞其結構的方法變成「連結數為 $0$ 的**平凡連結**」。

<br>

同時也代表，在毛巾挑戰中，兩個人將毛巾扣在一起時，無法以不鬆開手或破壞其結構的方法，讓兩人分開。

<br>

所以毛巾挑戰**不可能在不作弊的情況下挑戰成功**。

---

### 4. 小結

<br>

回顧一下，我們先是理解了**拓樸學**中的**同胚**以及**可逆的連續變形**，接著利用建模與簡化的方式，將毛巾挑戰時兩人成功前後的狀態分別簡化成**霍夫普連結**以及**平凡連結**並計算出個別的**連結數**，由於**連結數**為**拓撲不變量**，而霍普夫連結與平凡連結的**拓撲不變量**不同，所以這兩種連結不同胚，從而在毛巾挑戰中無法在不鬆開手或破壞其結構的情況下分開。

---

<br>

## 結論

看到這邊可能有些人會好奇：**可是有些影片挑戰成功了**，其實仔細看會發現很少有人發出真正解法，或是用錯位遮擋的方式來掩飾偷偷放開毛巾的行為，所以**毛巾挑戰終究還是一場騙局**。



<br>

在這篇專欄中，我們從觀察到的現象開始，到蒐集資料、推導並證實，最後得知真相。仔細想想生活中不乏很多現象值得我們去探求真相，無論是真是假，都會讓我們更加趨近於真理，保持實事求是的態度才能在這個資訊爆炸的時代，辨別真假，避免被混淆視聽。

<br>

我是Lewis，我們[**下一篇**](https://hackmd.io/@lewisjjj800/r1U-OQefxl)專欄見！




