9.2 曲線與曲面:曲率、第一基本形式#
曲率是幾何的「局部天氣」:曲線上它告訴你車要轉多急, 曲面上它告訴你面內生物量到的空間有多彎。
學習動機#
上一節(9.1)我們直奔高斯的絕妙定理,把曲面的「內蘊曲率」一次講完。 但層層推導裡其實藏著兩個更基礎的問題我們太快跳過了:
- 一條曲線的曲率到底是什麼? 為什麼要除以速度的三次方?為什麼曲率與撓率(torsion)能唯一確定 一條曲線的形狀?
- 曲面的第一基本形式是怎麼從切向量算出來的? \(E, F, G\) 究竟如何在 SymPy 流程中一步步現身?
這一節把基礎補齊。歷史上,這一整套「沿曲線運動 → 丈量轉彎的快慢(曲率)」的 框架是運動學的產物:十八世紀的數學家(Euler 建立剛體運動的寫法、 Monge 的葉形幾何及其學生 Dupin、Meusnier)不斷在問: 一輛車沿曲線跑、法向盤撐在轉彎處,切線方向的翻轉有多快? 接著 Gauss 開啟曲面道路,而 Frenet(以及幾乎同時的 Serret)在 1847 年把曲線框架系統化為 \(\mathbf{T}\) - \(\mathbf{N}\) - \(\mathbf{B}\) 三元組。
這也是本章節內容進一步往第 10 章(電腦圖學的樣條路徑、NURBS)、 以及物理學(Frenet 框架的協變加速、廣義相對論測地線) 鋪路的節骨。
在本節中,我們將:
- 參數化一條曲線 \(\mathbf{r}(t)\) ,討論切向量與弧長參數化。
- 建立 Frenet–Serret 框架( \(\mathbf{T}, \mathbf{N}, \mathbf{B}\) ), 給出曲率 \(\kappa\) 與撓率 \(\tau\) 。
- 推導任意參數下的曲率公式 \(\kappa = |\mathbf{r}' \times \mathbf{r}''| / |\mathbf{r}'|^3\) , 並看到「除以 \(|\mathbf{r}'|^3\) 」是自然的。
- 流程化地計算曲面的第一、第二基本形式。
- 沿途用 SymPy 驗證(螺旋線、拋物面、球面等)。
1. 參數化曲線:速度決定一切(但曲率不跟速度走)#
一條參數化曲線是
它的速度是
如果速率滿足 \(|\mathbf{r}\,'(t)| = 1\) ,我們稱 \(\mathbf{r}\) 以 弧長參數化(一般用參數 \(s\) 記之): 這時走過的距離就是參數本身的長度
一條幾何曲線乃是「相同的點集合」的多種參數化中的一種等價類。 其中曲率不跟速度走:無論你以 \(2x\) 速度(比如 \(t = \tilde t / 2\) ) 還是其他參數量測,都得到相同的曲率數值。 這是整節的第一個「不變量」精神:
跟幾何有關的量,需要在任何參數重標下是不變的。
SymPy:弧長#
import sympy as sp
t, s = sp.symbols('t s', real=True)
a, b = sp.symbols('a b', positive=True)
# 螺旋線 (helix)
r = sp.Matrix([a*sp.cos(t), a*sp.sin(t), b*t])
speed = sp.simplify(r.diff(t).norm())
print("speed =", speed)
# ==>
# speed = sqrt(a**2 + b**2)
# 從 t = 0 到 t = s 走了多遠
arc = sp.simplify(sp.integrate(speed, (t, 0, s)))
print("arc length =", arc)
# ==>
# arc length = s*sqrt(a**2 + b**2)
螺旋線的速率是常數 \(\sqrt{a^2 + b^2}\) :它繞圓柱上升時是一條 直線從平面捲起來的等價物, 而這就是本節第二個重點:曲線與曲面都是『底層幾何 + 參數化方式』的產物。
2. Frenet–Serret 框架#
設 \(\mathbf{r}(t)\) 為一條參數化曲線( \(\mathbf{r}\,' \neq 0\) ,且 \(\mathbf{r}\,' \times \mathbf{r}\,'' \neq 0\) , 即曲線局部不塌到直線上)。定義單位切向量
它是「當下的行進方向」。求導(在弧長參數下會好算很多:以 \(s\) 記之 時 \(\mathbf{T}'(s)\) 就是加速度的切向分量):
其中 \(\mathbf{N}\) 是「單位主法向量」, \(\kappa\) 是曲率; \(1/\kappa\) 是曲率半徑(曲線逼近的圓半徑)。
再來定義副法向量:
於是 \(\{ \mathbf{T}, \mathbf{N}, \mathbf{B}\}\) 為右手標架, 沿曲線扭著跑。Frenet–Serret 公式:
其中 \(\tau\) 是撓率(torsion):描述曲線脫離平面的速率 ( \(\tau = 0 \Longleftrightarrow\) 曲線是平面曲線)。
「唯一成形」定理(有符號調整):確定一條帶方向(directed)的曲線, 只需要 \(\kappa(s) > 0\) 和 \(\tau(s)\) 兩個函數——知道曲率的變化方式與 撓率的變化方式,曲線形狀就完全決定(的確是 up to 等距變換)—— 這個 theorem 給了我們一個「曲線被困在自己的曲率中」的圖景, 同時也是第 10 章 CAD 樣條曲線還原曲線的關鍵。
用 SymPy 建構 Frenet 框架#
import sympy as sp
def frenet(r, t):
"""給入參數化曲線 r(t) (SymPy given a matrix),傳回 T, N, B, kappa, tau。"""
r1 = sp.Matrix([sp.simplify(x) for x in r.diff(t)])
spd = sp.simplify(r1.norm())
T = sp.simplify(r1 / spd)
T1 = sp.simplify(T.diff(t))
T1n = sp.simplify(T1.norm())
kappa = sp.simplify(T1n / spd) # 參數重標不變
N = sp.simplify(T1 / T1n)
B = sp.simplify(T.cross(N))
# tau = -dB/ds . N = -(dB/dt . N) / spd
tau = sp.simplify(-sp.simplify(B.diff(t)).dot(N) / spd)
return T, N, B, kappa, tau
t = sp.symbols('t', real=True)
a, b = sp.symbols('a b', positive=True)
r_helix = sp.Matrix([a*sp.cos(t), a*sp.sin(t), b*t])
T, N, B, kappa, tau = frenet(r_helix, t)
print("kappa =", kappa)
print("tau =", tau)
# ==>
# kappa = a/(a**2 + b**2)
# tau = b/(a**2 + b**2)
重要驗證:螺旋線的 \(\kappa = a/(a^2 + b^2)\) , \(\tau = b/(a^2+b^2)\) , 兩者的比值為 \(\kappa/\tau = a/b\) ——螺旋線的每一圈角度為 \(2\pi b / \sqrt{a^2+b^2}\) 的上升 — 完全由比率 \(\tau / \kappa\) 決定。 雙向驗證:若取 \(b=0\) (純圓),則 \(\tau = 0\) ✓(平面曲線), 若退化到 \(a = 0\) (可以直接沿 \(z\) 軸走直線),則 \(\kappa = 0\) ✓。
正交性的檢查#
print("T.N =", sp.simplify(T.dot(N)))
print("T.B =", sp.simplify(T.dot(B)))
print("N.B =", sp.simplify(N.dot(B)))
# ==>
# T.N = 0 T.B = 0 N.B = 0
3. 任意參數下的曲率公式:為什麼除以 \(|\mathbf{r}'|^3\)#
上一段我們定義 \(\kappa = |d\mathbf{T}/ds|\) ,但在實作層面, 把 \(s(t)\) 求出再重參數化,計算代價不小。 幸好有一條可以在任意參數下直接使用的公式
直觀推導(用一個 \(\times\) 的幾何意義):
\(\mathbf{r}\,' = v \mathbf{T}\) ( \(v = |\mathbf{r}\,'|\) 為速率),求導:
利用 \(\dfrac{d\mathbf{T}}{dt} = v \, \dfrac{d\mathbf{T}}{ds} = v \kappa \mathbf{N}\) (連鎖法則):
叉積:
取長度即得 \(\left| \mathbf{r}\,' \times \mathbf{r}\,'' \right| = v^3 \kappa\) 。 除以 \(v^3\) 的來源一目了然:一項來自速度大小線性增益 × 兩項來自於加速度轉向分量的 \(v^2\) 增益。這條公式也讓對 任何參數化下、無需重參數化即可算曲率 ✓。
SymPy 推導:用符號 \(x(t), y(t)\) 做二維公式#
import sympy as sp
t = sp.symbols('t', real=True)
x, y = sp.Function('x')(t), sp.Function('y')(t)
# 二維情形:把「叉積」用 z-分量方式 (wedge = x'y'' - x''y') 表示,
# 並給出相應的 |r'|^3 = (x'^2 + y'^2)^(3/2)
w = sp.simplify(x*sp.diff(y, t, 2) - sp.diff(x, t, 2)*y)
k2d = sp.simplify(w / (sp.diff(x,t)**2 + sp.diff(y,t)**2)**sp.Rational(3, 2))
print("kappa_2D =", k2d)
# ==>
# kappa_2D = (x(t)*Derivative(y(t), (t, 2))
# - y(t)*Derivative(x(t), (t, 2))) /
# (Derivative(x(t), t)**2 + Derivative(y(t), t)**2)**(3/2)
代入拋物線 \(\mathbf{r}(t) = (t, t^2)\) :
tt = sp.symbols('tt', real=True)
r_p = sp.Matrix([tt, tt**2, sp.Integer(0)]) # 熱身:加個 0 進來化為三維
rx = sp.simplify(r_p.diff(tt).cross(r_p.diff(tt, 2)))
kappa = sp.simplify(rx.norm() / r_p.diff(tt).norm()**3)
print("parabola kappa =", kappa)
print("kappa at vertex =", kappa.subs(tt, 0))
# ==>
# parabola kappa = 2/(4*tt**2 + 1)**(3/2)
# kappa at vertex = 2
驗證:對 \(y = a x^2\) 型的拋物線,頂點處 \(y\,'' = 2a\) (切線水平、 所以 \(d\mathbf{T}/ds\) 恰為 \(y''\) ),故頂點曲率 \(\kappa(0) = 2a\) ; 當 \(a = 1\) 時 \(\kappa = 2\) 、曲率半徑 \(1/\kappa = 1/2\) ✓。 它不只是熟能生巧——第 10 章我們還會再把這個頂點曲率半徑帶進 樣條曲線中。
注意:速度影響分子分母同時#
如果用一個「重參數化」 \(\mathbf{r}(t) = \tilde{\mathbf{r}}(\varphi(t))\) , 這兩個分量將會同時個別改變; 而它們的比值,經分母的三次方抵銷,是不變的。 這是曲率 在「參數相對性」下的 invariance——一個提前的小克萊因綱領。 SymPy 可以驗證這不變性(習題 9.2.3)。
4. 撓率(torsion):曲線如何「逃離平面」#
撓率 \(\tau\) 的意義是:副法向量 \(\mathbf{B}\) 沿弧長旋轉的速率。 跟曲率不同的是,撓率允許正負( \(\mathbf{B}\) 往左偏或往右偏); 兩個手性且鏡像的螺旋線有相同的曲率但 \(\tau\) 的符號相反。
任意參數下之公式等同(用 \(\mathbf{r}'''\cdot (\mathbf{r}'\times \mathbf{r}'')\) ):
用 SymPy 檢查兩套公式:
import sympy as sp
t = sp.symbols('t', real=True)
a, b = sp.symbols('a b', positive=True)
r_helix = sp.Matrix([a*sp.cos(t), a*sp.sin(t), b*t])
# 法一:Frenet 一步步
r1 = sp.simplify(r_helix.diff(t))
T = sp.simplify(r1 / r1.norm())
T1 = sp.simplify(T.diff(t)); T1n = sp.simplify(T1.norm())
N = sp.simplify(T1 / T1n)
B = sp.simplify(T.cross(N))
tau1 = sp.simplify(-sp.simplify(B.diff(t)).dot(N) / r1.norm())
print("tau (Frenet, all-parameter) =", tau1)
# ==>
# tau (Frenet, all-parameter) = b/(a**2 + b**2)
# 法二:純行列式公式
r2 = sp.simplify(r_helix.diff(t).cross(r_helix.diff(t, 2)))
tau2 = sp.simplify(r2.dot(r_helix.diff(t, 3)) / r2.norm()**2)
print("tau (det formula) =", tau2)
# ==>
# tau (det formula) = b/(a**2 + b**2)
驗證:兩個公式一致 ✓。並且取 \(b \to 0\) 得 \(\tau \to 0\) (平面 ✓)。
5. 從曲線到曲面:第一基本形式的計算流程#
現在我們回頭確實建立曲面的計算流程。 在 9.1 我們已經給了 \(E, F, G\) 的定義;在這裡,把它變成 五步清楚、可重複的流程,讓每一步對應一個 SymPy 函數。
5.1 五步流程#
flowchart TD
A[參數化 r u,v] --> B[第 1 步:算 r_u r_v]
B --> C[第 2 步:E,F,G 三個內積]
C --> D[第 3 步:單位法向量 n]
D --> E[第 4 步:L,M,N 三個法向內積]
E --> F[第 5 步:K 與 H]一個通用的 SymPy 曲面幾何 helper:
import sympy as sp
def surf_geometry(r, u, v, normal_manual=None):
"""給一個參數化曲面 r(u,v),回傳其
(E, F, G), (L, M, N), K, H, n, det_metric。
參數 normal_manual 可指定 n 的符號化(例如 n = r/R for 球面)。
"""
ru = r.diff(u)
rv = r.diff(v)
E = sp.simplify(ru.dot(ru))
F = sp.simplify(ru.dot(rv))
G = sp.simplify(rv.dot(rv))
cru = sp.simplify(ru.cross(rv))
if normal_manual is None:
n = sp.simplify(cru / cru.norm())
else:
n = normal_manual
L = sp.simplify(r.diff(u, 2).dot(n))
M = sp.simplify(sp.simplify(r.diff(u, 1, v, 1)).dot(n))
N = sp.simplify(r.diff(v, 2).dot(n))
det_metric = sp.simplify(E*G - F**2)
K = sp.simplify((L*N - M*M) / det_metric)
H = sp.simplify((E*N - 2*F*M + G*L) / (2*det_metric))
return (E, F, G), (L, M, N), K, H, n, det_metric
5.2 球面:美得對稱#
R = sp.symbols('R', positive=True)
th, ph = sp.symbols('theta phi', real=True)
r_s = sp.Matrix([R*sp.sin(ph)*sp.cos(th),
R*sp.sin(ph)*sp.sin(th),
R*sp.cos(ph)])
n_manual = sp.simplify(r_s / R) # 用幾何直覺選定法向量(避免 Abs(sin) 這種代數噪音)
(E, F, G), (L, M, N), K, H, n, detG = surf_geometry(
r_s, th, ph, normal_manual=n_manual)
print("E, F, G =", E, F, G)
print("L, M, N =", sp.trigsimp(L), sp.trigsimp(M), sp.trigsimp(N))
print("K =", K, " H =", sp.trigsimp(H))
print("det G =", detG)
# ==>
# E, F, G = R**2*sin(phi)**2 0 R**2
# L, M, N = -R*sin(phi)**2 0 -R
# K = 1/R**2 H = -1/R
# det G = R**4*sin(phi)**2
幾何上的注解:
- \(E, F, G\) 中「 \(G\) 恰為 \(R^2\) 」而「 \(E\) 乘上 \(\sin^2\varphi\) 」: 沿經度( \(\theta\) )走時,愈靠近極點,同一個 \(d\theta\) 走得愈短—— 這正是地表測量早就知道的事實(高緯度的兩條經線比較靠近)。
- \(\mathrm{II} = -R ( \sin^2\varphi \, d\theta^2 + d\varphi^2 )\) , 球面「每一個方向都是一樣彎」:它是 \(K\) 常數曲面的代表案例。
- \(H = -1/R\) 的負號來自法向量選擇:我們取了 \(\mathbf{n} = \mathbf{r}/R\) (指向球外);若改取 \(\mathbf{n} = -\mathbf{r}/R\) (指向球心,這也是 \(\mathbf{r}_\theta \times \mathbf{r}_\varphi\) 的自然朝向),便得 \(H = +1/R\) 。 而 \(K = 1/R^2\) 不受影響:這就說明 \(K\) 不依賴法向量的選擇、 \(H\) 依賴(這就是 9.1 那個絕妙定理的細節張力)。
5.3 圓柱面:可以攤平的曲面#
u, v = sp.symbols('u v', real=True)
a = sp.symbols('a', positive=True)
r_c = sp.Matrix([a*sp.cos(v), a*sp.sin(v), u])
(E, F, G), (L, M, N), K, H, n, detG = surf_geometry(r_c, u, v)
print("E, F, G =", E, F, G)
print("L, M, N =", L, M, N)
print("K =", K, " H =", H)
# ==>
# E, F, G = 1 0 a**2
# L, M, N = 0 0 a
# K = 0 H = 1/(2*a)
重要事實: \(K = 0\) 但 \(H \neq 0\) 。 圓柱面在外面看是有「彎」( \(\mathrm{II}\) 有一個非零方向), 但在裡面看是「平」的:螞蟻在圓柱面內的各種量測 (三角形內角和、圓周長)跟在平面一樣。 這就是曲率無共存現象(彈性之 vs 形之)的簡單例子——紙捲成柱面不會撕破, 是因為這個過程是等距變換(保留 \(E, F, G\) 、因而保留 \(K\) = 0)。 這其實也是日常生活的事實:只有 Gaussian 曲率 0 的曲面可被展開成平面 (在一張紙上折角、捲成筒可以,捲成球殼不行—這就是「地圖不可能完美」的根源)。
5.4 鞍面:負曲率的例子#
x, y = sp.symbols('x y', real=True)
r_d = sp.Matrix([x, y, x**2 - y**2]) # 雙曲拋物面
(E, F, G), (L, M, N), K, H, n, detG = surf_geometry(r_d, x, y)
print("E, F, G =", E, F, G)
print("n =", n.T)
print("K =", K)
print("H =", H)
# ==>
# E, F, G = 4*x**2 + 1 -4*x*y 4*y**2 + 1
# n = Matrix([[-2*x/sqrt(4*x**2 + 4*y**2 + 1)],
# [2*y/sqrt(4*x**2 + 4*y**2 + 1)],
# [1/sqrt(4*x**2 + 4*y**2 + 1)]])
# K = -4/(16*x**4 + 32*x**2*y**2 + 8*x**2 + 16*y**4 + 8*y**2 + 1)
# H = 4*(y**2 - x**2)/(4*x**2 + 4*y**2 + 1)**(3/2)
注解:
- \(E = 4x^2 + 1\) 、 \(F = -4xy\) 、 \(G = 4y^2 + 1\) : 這是一個「隨位置變化的度量」——這正是 9.1 的 \(\mathrm{I}\) 的意義:畢氏定理的局部變體。
- \(K < 0\) :鞍面上三角形內角和小於 \(180°\) (在離原點愈近的位置情形愈接近 \(180°\) ,因為 \(K(0,0) = -4\) 但 愈遠愈趨近 0)。
- 在原點 \(K = -4\) ;在遠離處 \(K \to 0\) (漣漪展開直線化)。
6. 從測量的視角:內蘊與外蘊#
flowchart LR
subgraph 面內生物可量
I1[第一基本形式 E,F,G]
I2[高斯曲率 K]
I3[測地線、三角形內角和]
end
subgraph 外面觀察者可量
E1[第二基本形式 L,M,N]
E2[平均曲率 H ±]
E3[法向量場 n u,v]
end
I1 -- Theorema Egregium --> I2
E1 -. 高斯方程 .-> I2
I2 ==>|K>0| A[球面型幾何]
I2 ==>|K=0| B[歐氏幾何]
I2 ==>|K<0| C[雙曲幾何]內蘊的資訊(第一基本形式與其推衍——曲率 \(K\) 、測地線、面積、 角和等)是面內生物可測;外蘊的資訊(第二基本形式、平均曲率 \(H\) 的符號等等)則需要含「附件」的空間才能知道。
這種二分是本書第 6 章黎曼幾何的主體: 在黎曼之前的說法,空間默認「放在某個更大的空間裡、 從外面量」;黎曼之後,空間自己攜帶度量 \(g_{ij}\) (就是第一基本形式的推廣),以及伴隨的曲率張量 \(R^i{}_{jkl}\) (就是 Christoffel 推衍的推廣),從此全 內蘊。
所以說,「曲率與第一基本形式」不只是微分的工具, 而是把「幾何分成內蘊/外蘊」這門思想革命的文章。
7. 小結#
- 曲線:先用弧長重參數化,再得到各種參數無關的不變量: Frenet \(\mathbf{T} - \mathbf{N} - \mathbf{B}\) 框架、 \(\kappa\) 與 \(\tau\) 完全決定曲線的形狀(唯一成形定理)。公式 \(\kappa = |\mathbf{r}'\times\mathbf{r}''|/|\mathbf{r}'|^3\) 、 \(\tau = (\mathbf{r}'\times\mathbf{r}'') \cdot \mathbf{r}''' / |\mathbf{r}'\times\mathbf{r}''|^2\) 可以直接由 SymPy 推導。
- 曲面: 五步流程( \(E, F, G\) → \(\mathbf{n}\) → \(L, M, N\) → \(K, H\) )是牢記節奏;接著 9.3 這一節我們將用這個流程在 程式上帶入參數化,自動計算 \(K\) 。
- 內蘊 vs 外蘊:第一基本形式是內蘊量、 第二基本形式與 \(H\) 的符號則是外蘊量—— 這是古典微分幾何觀念的根基。
在下一節(9.3)我們會用一系列完整的 SymPy 演則——球面、圓柱面、 鞍面——把以上的流程具體化,讓一套 helper 在任意情況下都可工作。
習題 9.2#
編程提示:沿用本章之
frenet(r, t)、surf_geometry(r, u, v, normal_manual)等函數。
習題 9.2.1(橢圓的曲率) 橢圓參數化為 \(\mathbf{r}(t) = (a\cos t, b\sin t, 0)\) , \(a, b > 0\) 。 用本節之輔助函式計算 \(\kappa(t)\) ;然後計算在 \((a, 0)\) 與 \((0, b)\) 處的曲率,並驗證「極大曲率在長軸端點」。 (答案: \(\kappa(t) = \dfrac{ab}{(a^2\sin^2 t + b^2\cos^2 t)^{3/2}}\) , 故 \(\kappa(a, 0) = a/b^2\) 、 \(\kappa(0, b) = b/a^2\) 。)
習題 9.2.2(平面曲線 \(\tau = 0\) ) 三維空間中的平面曲線,例如 \(\mathbf{r}(t) = (\cos t, \sin t, 0)\) , 確認其 \(\tau(t) = 0\) ;與其推廣 \(\mathbf{r}(t) = (\cos t, \sin t, \cos t + \sin t)\) ——仍在某個平面裡面(是哪個平面?)——也驗證 \(\tau = 0\) 。 (提示:三個座標滿足 \(z = x + y\) ,所以曲線整條落在平面 \(z = x + y\) 上。)
習題 9.2.3(參數重標的不變性) 考慮曲線 \(\tilde{\mathbf{r}}(s) = (\cos s, \sin s, s)\) (單位螺旋線), 再做重參數化 \(\mathbf{r}(t) = \tilde{\mathbf{r}}(2t)\) 。 分別計算 \(\kappa_{\tilde{\mathbf{r}}}\) 與 \(\kappa_{\mathbf{r}}\) ,確認相等。 (解釋: \(\mathbf{r}\,' = 2\tilde{\mathbf{r}}\,'\) 、 \(\mathbf{r}\,'' = 4\tilde{\mathbf{r}}\,''\) ,所以分子 \(|\mathbf{r}\,'\times\mathbf{r}\,''|\) 變成 \(8\) 倍,而分母 \(|\mathbf{r}\,'|^3\) 也變成 \(8\) 倍——比值不變。)
習題 9.2.4(第一基本形式矩陣) 在雙曲拋物面 \(\mathbf{r}(x, y) = (x, y, x^2 - y^2)\) 上,用 surf_geometry 算出 \(E, F, G\) 。把它寫成矩陣 \(\mathbf{G}[x,y] = \begin{pmatrix} E & F \\ F & G \end{pmatrix}\) , 計算 \(\det \mathbf{G}\) ,並化簡。你應該得到 \(\det \mathbf{G} = 4x^2 + 4y^2 + 1 = |\mathbf{r}_x \times \mathbf{r}_y|^2\) , 這正是面積元素 \(dA = \sqrt{\det \mathbf{G}}\, dx\, dy\) 的出處: 第一基本形式不只是量長度,也是量面積。
習題 9.2.5(思考題:同一平面的兩種度量) 考慮「極座標」參數化的平面 \(\mathbf{r}(r, \theta) = (r\cos\theta, r\sin\theta, 0)\) 。 計算 \(E, F, G\) (你應得到 \(E = 1, F = 0, G = r^2\) ,仍指向同一個平面) 與它跟直角座標參數化 \(\mathbf{r}(u, v) = (u, v, 0)\) 的 \(E = 1, F = 0, G = 1\) 比較。 兩個參數化描述同一個平面; \(E, F, G\) 卻不同—— 這說明第一基本形式是「參數化 + 曲面」的資料、 而非曲面單獨的資料。用 intrinsic_K(9.1 節)驗證兩組 \((E,F,G)\) 算出之 \(K\) 都是 \(0\) 。