第 13 章 空間向量與立體幾何¶
(適用:台灣高中~大一;目標:用 SageMath 操作三維向量、內積與叉積,處理直線/平面/距離/角度,並用 3D 圖形建立空間直覺)
u = vector([1, 2, -1])
v = vector([3, -1, 4])
u, v, u+v, 2*u
# 長度(模)與內積
u_norm = u.norm()
v_norm = v.norm()
u_dot_v = u.dot_product(v)
u_norm, v_norm, u_dot_v
夾角¶
$ \cos\theta = \frac{u\cdot v}{\|u\|\|v\|} $
var('x')
cos_theta = u.dot_product(v)/(u.norm()*v.norm())
theta = arccos(cos_theta)
N(theta), N(theta*180/pi)
13.3 叉積(cross product):面積與垂直方向¶
對三維向量 u,v,叉積 $u imes v$ 具有:
- 方向:垂直於 u 與 v 所張成的平面
- 長度:$\|u \times v\| = \|u\|\|v\|\sin \theta$
- 幾何意義:平行四邊形面積
Sage:u.cross_product(v)
u = vector([1, 2, -1])
v = vector([3, -1, 4])
uxv = u.cross_product(v)
uxv, uxv.norm(), N(uxv.norm())
面積¶
- 平行四邊形面積:$\|u\times v\|$
- 三角形面積:$\frac12\|u\times v\|$
area_par = uxv.norm()
area_tri = area_par/2
area_par, area_tri
13.4 混合積(scalar triple product):體積¶
$$ [u,v,w] = u\cdot (v \times w) $$ 其絕對值是由 u,v,w 張成的平行六面體體積。
例:w=(2,1,0)。
u = vector([1, 2, -1])
v = vector([3, -1, 4])
w = vector([2, 1, 0])
triple = u.dot_product(v.cross_product(w))
triple, abs(triple)
若想要「四面體」體積(由三條邊向量 u,v,w 形成),則是 $|[u,v,w]|/6$。
tetra_vol = abs(triple)/6
tetra_vol
var('t')
P = vector([1, 0, 2])
d = vector([2, -1, 1])
line = P + t*d
line
可寫成座標形式: $ x=1+2t,\ y=0-t,\ z=2+t $
x_t, y_t, z_t = line[0], line[1], line[2]
x_t, y_t, z_t
A = vector([1, 0, 0])
B = vector([0, 1, 0])
C = vector([0, 0, 1])
n = (B - A).cross_product(C - A)
n
var('x y z')
# 平面方程:n·(X-A)=0
eq_plane_expr = expand(n.dot_product(vector([x, y, z]) - A))
eq_plane_expr
這個平面其實是 $x+y+z=1$(可從展開式看出)。
# 驗證:把 (x+y+z-1) 與 eq_plane_expr 比較是否成比例/相等
simplify(eq_plane_expr - (x + y + z - 1))
13.7 點到平面距離¶
平面:$Ax+By+Cz+D=0$,點 $P(x_0,y_0,z_0)$: $$ d=\frac{|Ax_0+By_0+Cz_0+D|}{\sqrt{A^2+B^2+C^2}} $$
例:點 P=(2,2,0) 到平面 x+y+z=1 的距離。
P = vector([2, 2, 0])
Acoef, Bcoef, Ccoef, Dcoef = 1, 1, 1, -1 # x+y+z-1=0
dist = abs(Acoef*P[0] + Bcoef*P[1] + Ccoef*P[2] + Dcoef)/sqrt(Acoef^2 + Bcoef^2 + Ccoef^2)
dist, N(dist)
var('lam')
nvec = vector([1, 1, 1])
H = P - lam*nvec
eq = H[0] + H[1] + H[2] == 1
lam_val = solve(eq, lam)[0].rhs()
lam_val
H_point = H.subs(lam=lam_val)
H_point
# 驗算 H 在平面上
H_point[0] + H_point[1] + H_point[2]
13.8 直線與平面的關係:平行、垂直、交點¶
直線方向 d 與平面法向 n:
- 直線平行平面:$d\cdot n = 0$
- 直線垂直平面:d 與 n 平行(叉積=0 或成比例)
- 求交點:把直線參數式代入平面方程解 t
例:直線 $\ell(t)= (1,0,2)+t(2,-1,1)$ 與平面 x+y+z=1 的交點。
var('t')
P0 = vector([1, 0, 2])
d = vector([2, -1, 1])
X = P0 + t*d
# 代入平面 x+y+z=1
eq = X[0] + X[1] + X[2] == 1
t_sol = solve(eq, t)[0].rhs()
t_sol
intersection = X.subs(t=t_sol)
intersection
13.9 點到直線距離:用叉積(很常用)¶
點 P 到直線(過點 A,方向 d)的距離: $$ d=\frac{\|(P-A) \times d\|}{\|d\|} $$
例:點 P=(2,2,0) 到直線 $\ell(t)=(1,0,2)+t(2,-1,1)$ 的距離。
P = vector([2, 2, 0])
A0 = vector([1, 0, 2])
d = vector([2, -1, 1])
dist = (P - A0).cross_product(d).norm()/d.norm()
dist, N(dist)
# 3D 視覺化(若你的環境支援互動 3D,會很有感),可以用滑鼠或手把下方圖形旋轉,放大,縮小
var('t')
P0 = vector([1, 0, 2])
d = vector([2, -1, 1])
X = P0 + t*d
# 直線(取 t 在 [-2,2] 畫線段)
L = parametric_plot3d((X[0], X[1], X[2]), (t, -2, 2))
# 平面 x+y+z=1 可參數化:令 x=s, y=u, z=1-s-u
var('s u')
PL = parametric_plot3d((s, u, 1 - s - u), (s, -1, 2), (u, -1, 2), opacity=0.4)
# 交點
t_sol = solve(X[0] + X[1] + X[2] == 1, t)[0].rhs()
I = X.subs(t=t_sol)
Pnt = point3d((I[0], I[1], I[2]), size=30)
PL + L + Pnt
13.11 本章小結:用向量工具箱解立體幾何¶
你現在應該能:
- 建立 3D 向量,算長度、內積、夾角
- 用叉積算面積、判斷垂直方向
- 用混合積算體積
- 用向量式寫直線、用法向量寫平面並由三點求平面
- 算點到平面距離、點到直線距離,並找交點/投影點
- 用 3D 圖形輔助理解(若環境支援)
練習題(附提示)¶
叉積面積:給 u=(1,0,2), v=(2,1,0),求平行四邊形面積與三角形面積。
提示:u.cross_product(v).norm()。平面方程:過 A=(1,1,0), B=(2,0,1), C=(0,2,1) 的平面一般式。
提示:n=(B-A)×(C-A),再寫 n·(X-A)=0。點到平面距離:點 P=(1,0,3) 到平面 2x-y+2z-4=0 的距離。
提示:距離公式。直線與平面交點:直線 (0,1,2)+t(1,1,-1) 與平面 x+y+z=3 的交點。
提示:代入平面方程解 t。
5.(挑戰)點到直線距離:點 P=(3,0,0) 到直線 (1,1,1)+t(2,-1,0) 的距離。
提示:$\|(P-A)\times d\|/\|d\|$。
下一章(第 14 章)我們會進入「排列組合與機率」:
你會用 Sage 做計數、列舉、模擬(Monte Carlo),把抽象的機率概念變得可操作。