2.3 三角形與畢氏定理:用 SymPy 驗證(公元前 500 年 / 公元 2020 年)#
學習動機#
畢氏定理大概是全人類最著名的一條數學定理:直角三角形中,斜邊的平方等於兩直角邊平方之和,
它有三奇:一奇是古老——巴比倫泥板 Plimpton 322(約公元前 1800 年)已列出整整十幾組「畢氏三元數」;二奇是證明多——Elisha Loomis 在 1927 年的《畢氏定理命題》(The Pythagorean Proposition)收集了 371 個證明;三奇是穿透力強——它死不掉,座標幾何靠它算距離,微分幾何靠它定義度量,電腦圖學靠它算光線與像素。本章是本書第一次把「歷史證明」與「機器驗證」並排放置:你會看到 Euclid 命題 I.47 的面積式證明、中國《周髀算經》的趙爽弦圖、Garfield(美國總統)的梯形證明,然後把每一個都翻譯成 SymPy 程式碼。讀完本節你將能:
- 說出畢氏關係的三種文化起源(巴比倫表、畢氏學派、Euclid 系統證明);
- 重建 Euclid I.47 的證明結構;
- 至少完整推導三種不同證明(面積式、相似形比例式、向量內積式);
- 用 SymPy 的
Triangle類(is_right、is_similar、is_equilateral、angles等)對以上證明做機器驗證。
1. 巴比倫人與畢達哥拉斯:同一定理的兩種身世#
1.1 巴比倫:定理是一張表#
Plimpton 322 泥板(哥倫比亞大學藏,約公元前 1800 年)列有數對 \((b, d, l)\) ,其中 \(b\) 是短邊、 \(d\) 是對角線、 \(l\) 是長邊,關係恰為 \(b^2 + l^2 = d^2\) 。其中最驚人的一組是 \((119, 120, 169)\) ——這絕非湊巧,而是系統計算的結果。巴比倫「有」畢氏定理,但形態是計算表格:照著算就對了,沒有「為什麼」。
1.2 畢達哥拉斯學派:定理是一個發現#
畢達哥拉斯(約公元前 570–495 年,薩摩斯;後移居南義大利克羅頓建立學派)把這條關係變成真理:他們注意到,用小正方形鋪在直角三角形的三邊上,二小一大的面積恰好相等。傳說學派為此殺牛慶祝("四面體悲劇":相傳他們因發現 \(\sqrt{2}\) 不可公度量——正方形對角線與邊不可比——而陷入信仰危機)。希臘人此處的偉大躍遷是:把定理從「可用的公式」升級為「必須證明的命題」——這正是 1.2 節與 2.2 節的主題。
可驗證的巴比倫表 + 希臘證明,兩者都要在 SymPy 呈現。先列三四組巴比倫三元數並機器檢查:
import sympy
from sympy import Integer
triples = [(3, 4, 5), (5, 12, 13), (8, 15, 17), (119, 120, 169), (3367, 3456, 4825)]
for a, b, c in triples:
a, b, c = Integer(a), Integer(b), Integer(c)
print(a**2 + b**2 == c**2)
# 預期輸出:True True True True True(Plimpton 322 的數據精确成立)
最後一組 \((3367, 3456, 4825)\) 來自 Plimpton 322 第 2 列,精確等式在純符號層面成立——SymPy 用整數代數驗證,沒有浮點誤差。
1.3 三個史前文化各有一個名字#
這條定理在中文教材常叫「勾股定理」(勾 3 股 4 弦 5);印度《繩法經》(Śulba Sūtras,約公元前 800 年)也有叙述版;中世紀阿拉伯數學家叫它「新娘的椅子」。命名不同,但證明的榮譽屬於希臘——第一個寫下一般證明的是誰已不可考,流傳下來最系統的一個就是 Euclid I.47。
2. Euclid 命題 I.47:面積式證明#
2.1 證明草圖#
Euclid I.47 的證明不用代數,而是面積拼圖:在直角三角形 \(ABC\) ( \(\angle A\) 為直角)三邊向外作正方形——邊 \(c\) 的、邊 \(b\) 的、邊 \(a\) 的。證明策略:
- 過 \(A\) 作 \(BC\) 的平行線,把邊 \(c\) 的正方形切成兩塊矩形;
- 分別證「左矩形面積 = 邊 \(a\) 正方形」「右矩形面積 = 邊 \(b\) 正方形」;
- 因此矩形面積和 = \(a^2 + b^2\) = 邊 \(c\) 正方形面積 = \(c^2\) ,得 \(c^2 = a^2 + b^2\) 。
中間的關鍵步驟是用全等三角形面積相等證明"左矩形 = \(a^2\) ":把正方形斜切一刀得到一個三角形,再證一個"翻折"的全等(用 I.4 SAS)。
整個過程依賴三個前置命題(就是 2.2 節依賴鏈的例子):
- I.4(SAS 全等):確認翻折後三角形等積;
- I.41:同底等高,三角形面積與矩形面積的關係;
- I.31:過直線外一點恰有一條平行線。
2.2 用 SymPy 驗證 Euclid 證明#
要在程式裡做 Euclid 的拼圖,最自然的工具是:一個「以線段 \(PQ\) 為一邊、向外作正方形」的函式。把它寫出來,就能把 I.47 的圖整個建好:
import sympy
from sympy import Point, Matrix, Polygon
from sympy.geometry import Triangle
def perp_offset(P, Q, d, side=1):
"""從線段 PQ 出發,沿其法向(side=1 一側,side=-1 另一側)擴張 d。"""
v = Matrix([Q.x - P.x, Q.y - P.y])
n = Matrix([-v[1], v[0]]) * side # 法向量 = 旋轉 90°
n = n / n.norm() * d
return Point(Q.x + n[0], Q.y + n[1]), Point(P.x + n[0], P.y + n[1])
def square_on(P, Q, side=1):
"""以 PQ 為一邊的正方形,其餘兩頂點向外(side=±1)。"""
R, S = perp_offset(P, Q, P.distance(Q), side)
return Polygon(P, Q, R, S)
A = Point(0, 0); B = Point(3, 0)
C = Point(0, 4) # 直角在 A
# 三個正方形
sq_c = square_on(B, C, side=-1) # 邊 c(斜邊)
sq_a = square_on(A, B, side=-1) # 邊 a = 3
sq_b = square_on(A, C, side=1) # 邊 b = 4(注意方向)
print(sq_a.area) # 預期輸出:9
print(sq_b.area) # 預期輸出:16
print(sympy.simplify(sq_c.area)) # 預期輸出:25
print(sq_a.area + sq_b.area == sq_c.area)
# 預期輸出:True —— I.47 對 (3,4,5) 成立
這只是驗證了特例。要驗證一般性,用符號邊長:
import sympy
from sympy import Point, symbols, simplify
u, v = symbols('u v', positive=True) # 兩直角邊長
A = Point(0, 0)
B = Point(u, 0)
C = Point(0, v)
a2 = A.distance(B) ** 2
b2 = A.distance(C) ** 2
c2 = B.distance(C) ** 2
print(sympy.simplify(c2), sympy.simplify(a2 + b2), sympy.simplify(c2 - a2 - b2) == 0)
# 預期輸出:u**2 + v**2 u**2 + v**2 True
(B.distance(C) 由 SymPy 展開為 \(\sqrt{u^2 + v^2}\) ;平方之後就是畢氏關係本身。)注意這個驗證有個陷阱:它不證明畢氏定理,只證明了「座標下距離公式 + 展開 > 畢氏」——距離公式本身就用了畢氏!這是座標證明常被批評之處(3.1 節會正式討論)。Euclid I.47 的價值在於不依賴座標與測量的純面積推理。SymPy 讓我們既能按 Euclid 的方式拼圖(前面的 square_on 程式),又能為座標式做快速檢查——關鍵永遠是知道你在驗證哪一層(見 2.2 節的層次圖)。
3. 證明二:相似形比例式(最短證明)#
3.1 歐幾里得 VI.31 或「小了我一倍的證明」#
最經典的另一類證明只用相似三角形。設直角在 \(A\) ,作頂點 \(A\) 到斜邊的高,把原三角形切成兩個小直角三角形 \(\triangle ABD'\) 與 \(\triangle ACD'\) 。每個小三角形都與原三角形相似(兩個角相等)——這些相似性的原型正是 2.1 節第 8 個定義。然後:
(比例式推導略;細節見下面 SymPy 層)最終兩式相加 \(a^2 + b^2 = AC \cdot AD' + AB \cdot AD'\) ~
這條證明道路的特性是:不用面積、只與比例論有關,對不可公度量也成立(λ measure-free)。這正像古典比例論的「現代化」,由 Eudoxus 完成、Euclid 第 VI 卷收錄。真相是:這條道路依賴經典比例論(Euclid V 卷),由 Dobble-proof 推 ratlar。
3.2 SymPy 的 is_similar 驗證相似性#
SymPy 的 Triangle.is_similar 直接支持相似性判斷。實現全流程:
import sympy
from sympy import Point, Rational, simplify
from sympy.geometry import Triangle
# 直角三角形,直角在 A=(0,0):B=(4,0)、C=(0,3)
A = Point(0, 0)
B = Point(4, 0)
C = Point(0, 3)
# 頂點 A 到斜邊 BC 的高,腳點 D
BC = sympy.Line(B, C)
D = sympy.Line(A, A + __import__('sympy').Point(0,1)).intersection(BC)
又是繞遠路——切高正確做法:垂線為通過 A、斜率為 \(-1/m_{BC}\) 。乾淨版本:
import sympy
from sympy import Point, Rational, simplify
from sympy.geometry import Triangle, Line
A = Point(0, 0)
B = Point(4, 0)
C = Point(0, 3)
# 斜邊 BC 的直線;過 A 作 BC 的垂線,取交點 D
BC = Line(B, C)
alt = BC.perpendicular_line(A)
D = alt.intersection(BC)[0] # 交點(高腳)
print(D) # 預期輸出:Point2D(48/25, 36/25)
# 三個三角形:原三角形 + 兩個小三角形
t0 = Triangle(A, B, C)
t1 = Triangle(A, D, B)
t2 = Triangle(A, C, D)
# 相似性驗證:三對互相似
print(t0.is_similar(t1), t0.is_similar(t2), t1.is_similar(t2))
# 預期輸出:True True True
# 比例式驗證:AB^2 = BD * BC,AC^2 = CD * BC,兩式相加得 BC^2
BD = B.distance(D)
DC = C.distance(D)
BC_ = B.distance(C)
ratio1 = B.distance(A) ** 2
ratio2 = A.distance(C) ** 2
print(simplify(BD * BC_ - ratio1)) # 預期輸出:0
print(simplify(DC * BC_ - ratio2)) # 預期輸出:0
print(simplify(BD * BC_ + DC * BC_ - BC_ ** 2))
# 預期輸出:0 —— 因 BD + DC = BC,故 a^2 + b^2 = c^2。證畢。
兩個 <expected>0</expected> 都成立——這就是相似形證明的機器版:比例式被反覆代換成等式,再被 SymPy 之 simplify 化成零。D 點座標 \(\left(\frac{48}{25}, \frac{36}{25}\right)\) 是計算自動得到的,不依賴 3-4-5 特殊數——把 3、4 換成符號同樣跑得動。
3.3 附註:is_similar 不能做到#
Triangle.is_similar 檢查的是形狀(邊長成比例)。對以下情況它不可靠:
- 面積相等但形狀不同:
Triangle((0,0),(1,0),(0,2))與Triangle((0,0),(1,0),(1,4))area都是 1,但is_similar是False; - 共點、共線這些拓扑性質要用
intersection、is_convex等另查;
使用幾何 libraries 時「這個 function 究竟檢查了什麼」的語義最好先確認(看 docstring)——電腦幫你驗,你不能放棄思考。
4. 證明三:趙爽弦圖與 Garfield 梯形#
4.1 趙爽弦圖(約 3 世紀,中國)#
《周髀算經》注釋者趙爽(三國吳)用一個「弦圖」給出出入相補證明:大正方形(邊 \(c\) )內含四個全等直角三角形(勾 \(a\) 、股 \(b\) 、弦 \(c\) ),中間留一個小正方形(邊 \(b - a\) ):
SymPy 一步驗證:
import sympy
from sympy import symbols, simplify, Rational
a, b = symbols('a b', positive=True)
little = (b - a) ** 2 # 中間小正方形
four_tri = 4 * Rational(1, 2) * a * b # 四個三角形
total = simplify(little + four_tri) # 大正方形 c^2
print(total) # 預期輸出:a**2 + b**2
代數展開一步到位——趙爽的「出入相補」本質上是多項式恆等式,SymPy 最擅長。3 世紀的草圖與 2020 年的計算機代數系統在此完全同構。
4.2 Garfield 總統的梯形證明(約 1876)#
美國總統 James A. Garfield(數學家出身,遇刺前的 1876 年)發表過一個漂亮證明:由三個三角形拼出的梯形,兩種方法算面積
令兩式相等:
import sympy
from sympy import symbols, simplify, Eq, solve
a, b, c = symbols('a b c', positive=True)
trap_area = (a + b) * (a + b) / 2 # 梯形面積
tri_sum = a * b / 2 + a * b / 2 + c ** 2 / 2 # 兩繞射三角形+ 直角三角形
rel = simplify(Eq(trap_area, tri_sum))
Eq(...) 只是建立等式,要化成「梯形 − 三角形」:
diff = simplify(trap_area - tri_sum) # = (a**2 + b**2 - c**2)/2
print(diff)
from sympy import Eq
print(Eq(diff, 0)) # 預期輸出:a**2 + b**2 == c**2
梯形約化成的 \((a^2 + b^2 - c^2)/2 = 0\) 非常乾淨地給出 \(a^2 + b^2 = c^2\) 。很難不同意這個證明比 Euclid I.47 的文字短得多:把它寫進一個符號化時代,如果 Garfield 代表一種「數學教育的未來」,那麼 SymPy 正是我們這一代的 Garfield。
4.3 證明複雜度的直觀對比#
| 證明 | 主體結構 | 前置工具 | SymPy 中實現的行數 |
|---|---|---|---|
| Euclid I.47 | 面積拼圖 | I.4, I.41 | 約 20 |
| 相似形(VI.31 思想) | 比例式 | 相似性、比例論 | 約 15 |
| 趙爽弦圖 | 面積代數 | 「出入相補」 | 3 |
| Garfield 梯形 | 面積代數 | 梯形面積 | 4 |
| 向量內積(見 4.4) | 代數 | 內積分配律 | 3 |
5. 三角形的家族:SymPy 的 Triangle API#
畢氏定理集中在直角三角形,但 SymPy 的 Triangle 類支援整個家族。把本章最關鍵的 API 一次摸完:
import sympy
from sympy import Point, Rational, simplify, sqrt
from sympy.geometry import Triangle
# 直角三角形 3-4-5,直角在 A
t = Triangle(Point(0, 0), Point(4, 0), Point(0, 3))
print(t.is_right()) # 預期輸出:True
print(t.is_scalene()) # 預期輸出:True(不等腰)
print(t.is_isosceles()) # 預期輸出:False
print(t.area) # 預期輸出:6
print(t.perimeter) # 預期輸出:12
print(t.inradius) # 預期輸出:1(內切圓半徑)
print(t.circumradius) # 預期輸出:5/2(外接圓半徑)
# 中線(medians)— 對應 Euclid I.以後的結構輔助
m = t.medians[Point(0, 0)]
print(m) # 預期輸出:Segment2D(Point2D(0, 0), Point2D(2, 3/2))
# 角:t.angles 是「頂點 → 角」的字典
angles = t.angles
for k, v in angles.items():
print(k, v)
# 預期輸出:
# Point2D(0, 3) pi/2
# Point2D(0, 0) pi/2 ← 對!!直角在 A = (0,0)?
小心,這個示例區塊的最後一段有一個陷阱:直角在 \(A=(0,0)\) 還是在 \(C=(0,3)\) ? 直角三角形的直角在兩直角邊相遇處 —— \(A\) 。但上面輸出把它列在 Point2D(0, 3),那是因為我把三角形頂點設成 Point(0,0)=A?:
print(angles)
# {Point2D(0, 3): ..., Point2D(0, 0): pi/2, Point2D(4, 0): ...}
正確:** \(A=(0,0)\) 的角是 \(\pi/2\) **。(A 處兩邊是 x 與 y 方向,相互垂直。)要魯棒地「揀出直角」,寫一個謂詞:
import sympy
from sympy import pi
from sympy.geometry import Triangle
def vertex_of_right_angle(t):
"""回傳哪個頂點的角等於 pi/2"""
if not t.is_right():
return None
for v, ang in t.angles.items():
if sympy.simplify(ang - pi) == 0 or sympy.simplify(ang - pi/2) == 0:
if sympy.simplify(ang - pi/2) == 0:
return v
return None
t = Triangle(Point(0, 0), Point(4, 0), Point(0, 3))
print(vertex_of_right_angle(t)) # 預期輸出:Point2D(0, 0)
等邊三角形的驗證同樣方便:
import sympy
from sympy import sqrt, Rational, pi
from sympy.geometry import Triangle
e = Triangle(Point(0, 0), Point(1, 0), Point(Rational(1, 2), sqrt(3)/2))
print(e.is_equilateral()) # 預期輸出:True
print(all(sympy.simplify(v - pi/3) == 0 for v in e.angles.values()))
# 預期輸出:True(每個角 = pi/3)
print(e.area) # 預期輸出:sqrt(3)/4
5.1 高、中線、分角線的三件式#
三角形的三大輔助線也在 API 中:
import sympy
from sympy import Point, simplify
from sympy.geometry import Triangle
t = Triangle(Point(0, 0), Point(4, 0), Point(0, 3))
# 中線:頂點到對邊中點
print(t.medians[Point(4, 0)])
# 預期輸出:Segment2D(Point2D(4, 0), Point2D(0, 3/2))
# 高:BC.perpendicular_line(A) 也建基於 perp,Triangle 有 altitude 屬性
alt = t.altitude(0) # 第 0 個頂點 A 的高
print(alt)
# 這回傳 ABC 頂點 A 的「高」對象其實依版本不同。更可靠的方式:
from sympy.geometry import Line
mBC = Line(Point(4, 0), Point(0, 3))
hA = mBC.perpendicular_line(Point(0, 0))
print(hA.intersection(mBC)[0])
# 預期輸出:Point2D(48/25, 36/25) —— 與 3.2 節 D 相同
教訓:SymPy 的 API 隨版本微調(altitude 的回傳型別在不同版本不同)。遇到怪返回,用 help 或直接改用 Line.perpendicular_line — 本書因此喜歡「基本類(Point、Line、Circle)+ 自己寫的小函式」,而不是依賴高層 API。
6. 前因後果:畢氏定理的兩千年延展#
- 座標幾何(1637):笛卡兒把距離定義為 \(\sqrt{(x_1-x_2)^2 + (y_1-y_2)^2}\) ——畢氏定理的解析翻譯。3.2 節將以此為核心。今天的
distance計算、Python 的math.hypot、NumPy 的np.linalg.norm,全都是它的化身。 - 度量空間(Riemann,1854;第 9 章):黎曼把「平方和開根號」的這一形式抽象成度量(metric),各自的精神是:距離不必在歐氏空間才有——噸在流形上一樣可用「局部畢氏」。
- 愛因斯坦相對性(1905/1915):狹義相對論的間隔 \(c^2 t^2 - x^2 - y^2 - z^2\) 是帶負號的畢氏;廣義相對論則把這個帶符號的 kvázi-畢氏放在彎曲時空每一點上。物理學重用了 2500 年前的定理。
- 計算幾何與機器學習(第 8、10 章):Voronoi 圖的定義「最近點」由畢氏距離決定;kernel 方法在高維空間重複使用餘弦 + 畢氏的關係。
- 浮點運算的隱患:
sqrt(a*a + b*b)在 \(a, b\) 極大時會溢位——標準庫hypot(a, b)用 smart 縮放避免。用 SymPy 检查一个悲劇案例:
import math
import sympy
a, b = 3e200, 4e200
# 樸素畢氏:溢位為 inf
try:
print(math.sqrt(a*a + b*b))
except OverflowError:
print("Overflow!") # 頂部的浮點工業表現:3e200**2 = inf
# 穩健版本
print(math.hypot(a, b)) # 預期輸出:5e+200
# 精確算術不會有這問題
print(sympy.sqrt(sympy.Integer(3*10**200)**2 + sympy.Integer(4*10**200)**2))
# 預期輸出:5000000000000000000000000000000...(200 位精確)
7. SymPy 總整合:一個有關畢氏安檢的小工具#
把前面所有片段整合成一個「入凳工具」——判斷任意三點是否為直角三角形、回報直角位置、列印全部三邊平方關係:
import sympy
from sympy import Point, simplify, pi
from sympy.geometry import Triangle
def pythagorean_report(A, B, C):
t = Triangle(A, B, C)
s1, s2, s3 = A.distance(B), B.distance(C), A.distance(C)
subs = {s1: 'a', s2: 'b', s3: 'c'}
print("邊長:", simplify(s1), simplify(s2), simplify(s3))
# 逐一檢查 c^2 = a^2 + b^2 的三種排列
ok = []
for hyp, others in [
(s3, (s1, s2)), (s2, (s1, s3)), (s1, (s2, s3)),
]:
lhs = hyp ** 2
rhs = others[0] ** 2 + others[1] ** 2
ok.append(sympy.simplify(lhs - rhs) == 0)
print("畢氏成立?", True in ok)
if t.is_right():
for v, ang in t.angles.items():
if sympy.simplify(ang - pi/2) == 0:
print("直角頂點:", v)
return True in ok
print(pythagorean_report(Point(0,0), Point(4,0), Point(0,3)))
# 預期輸出:
# 邊長: 4 5 3
# 畢氏成立? True
# 直角頂點: Point2D(0, 0)
# True
大功告成。這個函式可以拿去當成你以後「檢查自己幾何代入計算」的固定工具。
8. 歷史與文化:為什麼我們還在證明它?#
Loomis 收集的 371 個證明中,幾個特別的:
- 達文西:用對稱拼圖(雙四邊形)證明;
- 威爾科克斯(人工證明者):用具無所不包的動態幾何前置;
- Ann Condit:1990 年代至今還在投稿新證明的高中教師;
- 2018 年前的著名者則是 Johnson pilotson 與兩位高中生 Calcea Johnson 與 Ne'Kiya Jackson 在 2022 年發表的三角函數畢氏證明——衝破「sin² + cos² = 1 是一個畢氏定理循環」的質疑,登上了媒體。
畢氏定理也是證明技術的賽場:面積、相似、比例、向量、複數、三角函數、微積分(投影法),每一種新工具誕生,都會先被拿來證明一次畢氏定理。第 7 章你將看到它作為等距變換不變量的群論版,第 9 章將看到黎曼度量內蘊版。
9. 小結#
- 畢氏關係在巴比倫以計算表格存在;在希臘以「需證明的定理」存在;在中國以「出入相補」的弦圖存在。
- Euclid I.47 用面積拼圖;相似形證明用比例;趙爽弦圖與 Garfield 梯形用代數恆等式——四條證明思路全部可在 SymPy 中重現。
- SymPy 的
Triangle(is_right、is_similar、is_equilateral、angles、medians、inradius、circumradius)是三角形家族的計算刀口;但要記得「它驗證的是什麼」。 - 別忘了座標距離公式已內含畢氏定理——用座標「證明」畢氏是循環論證;用面積與比例才是非循環證明。
- 從笛卡兒到黎曼到愛因斯坦,畢氏關係在各條數學大路上反覆出現。本書後面 6、7、9、10 章將不斷回來看你。
習題#
- Plimpton 322 補完:下面四組中哪些真的滿足 \(a^2 + b^2 = c^2\) ?用 SymPy 逐一檢查(精確整數運算,不要浮點): \((4961, 6480, 8161)\) 、 \((45, 60, 75)\) 、 \((65, 72, 97)\) 、 \((161, 240, 289)\) 。
- 一般等腰直角:用 2.2 節的
square_on函式,在等腰直角三角形 \(A=(0,0)\) 、 \(B=(1,0)\) 、 \(C=(0,1)\) 三邊各作正方形,並用Polygon.area驗證兩小正方形面積和 = 大正方形面積(預期輸出 \(2\) )。 - 相似形證明的符號版:把 3.2 節的 3-4-5 換成符號 \(u\) 、 \(v\) (兩股長),驗證 \(BD \cdot BC = u^2\) 、 \(DC \cdot BC = v^2\) 精確成立(
simplify傳回 0)。 - 弦圖色塊:把趙爽弦圖的四個全等三角形與中央小正方形的頂點座標寫出來(大正方形邊長 \(c\) ,斜邊置於水平),並用
Polygon.area驗證「大正方形 − 4 × 三角形 = \((b-a)^2\) 」。 - 在非歐世界的失敗預告:畢氏定理在球面上不成立。取單位球上的赤道 \(AB\) (長 \(\pi/2\) 的弧,兩端 \((1,0,0)\) 與 \((0,1,0)\) )經北極第三邊 \(C=(0,0,1)\) ,這三角形三邊都長 \(\pi/2\) 。用弦長(歐氏直線距離)與弧長各計算一次說明:弦長關係 \((\pi/2)^2 \neq (\sqrt{2})^2 + (\sqrt{2})^2\) 對弧長不成立(球面幾何主題見第 6、9 章)。