第 12 章 二維向量與直線幾何¶

(適用:台灣高中~大一;目標:用 SageMath 把向量、內積、距離、投影與直線方程串起來,並用圖形驗證幾何直覺)

12.1 本章地圖:你要會的幾件事¶

二維向量與直線幾何常見任務:

  • 向量表示、加減、倍乘、長度(模)
  • 內積:夾角、垂直判斷、投影
  • 點到點距離、點到直線距離
  • 直線的多種表示:兩點式、點斜式、一般式、參數式
  • 交點、平行、垂直、垂足(投影點)

SageMath 能幫你:

  • 快速算向量與內積、解方程找交點
  • 用 plot 把幾何畫出來(建立直覺與驗算)

本章把「代數」與「幾何」連起來:每個幾何結論都能用計算驗證。


12.2 二維向量的建立:vector¶

在 Sage 裡常用:

  • vector([a,b]) 建立向量
  • u + v, u - v, c*u
  • u.norm() 或 sqrt(u*u)(內積)

先建立兩個向量: $ u=(2,-1),\ v=(-3,4) $

In [1]:
u = vector([2, -1])
v = vector([-3, 4])

u, v, u+v, u-v, 2*u
Out[1]:

長度(模)與距離¶

$ \|u\|=\sqrt{u\cdot u} $

注意:在 Sage,向量內積可用 u.dot_product(v) 或 u*v(在向量情境下通常是內積)。

In [2]:
u_norm = u.norm()
v_norm = v.norm()
u_dot_v = u.dot_product(v)

u_norm, v_norm, u_dot_v
Out[2]:

12.3 內積與夾角:平行/垂直的判斷¶

(A) 垂直判斷¶

$ u\perp v \iff u\cdot v = 0 $

(B) 夾角¶

$ \cos \theta = \frac{u\cdot v}{\|u\|\|v\|} $

用 Sage 算出 u 與 v 的夾角(弧度與度數)。

In [3]:
import math
cos_theta = u.dot_product(v)/(u.norm()*v.norm())
theta = arccos(cos_theta)
N(theta), N(theta*180/pi)
Out[3]:

注意:arccos 輸出是弧度;乘 180/pi 才是度數。


12.4 投影(projection):把向量「投到」另一個向量方向上¶

向量 u 在 v 上的投影(向量形式): $ \operatorname{proj}_v(u)=\frac{u\cdot v}{v\cdot v}\,v $

(前提:v ≠ 0)

In [4]:
proj_v_u = (u.dot_product(v)/v.dot_product(v))*v
proj_v_u
Out[4]:

投影的幾何意義:

  • proj_v(u) 與 v 平行
  • u - proj_v(u) 與 v 垂直

用內積驗證第二點。

In [5]:
w = u - proj_v_u
w.dot_product(v)  # 應該是 0(或非常接近 0)
Out[5]:

12.5 點、向量、與距離¶

(A) 用向量表示點¶

平面上的點 P=(x,y) 也可以用向量表示:vector([x,y])

(B) 兩點距離¶

$ d(P,Q)=\|Q-P\| $

例:P=(1,2), Q=(-2,5)

In [6]:
P = vector([1, 2])
Q = vector([-2, 5])

dist_PQ = (Q - P).norm()
dist_PQ, N(dist_PQ)
Out[6]:

12.6 直線的多種表示¶

(A) 兩點式/參數式(向量式)¶

給兩點 P, Q,方向向量 d = Q-P: $ \ell(t)=P+t\,d $

(B) 點斜式¶

$ y-y_0 = m(x-x_0) $

(C) 一般式¶

$ Ax+By+C=0 $

本章用「向量式」當核心,因為它最容易做投影、距離、交點。

例:過 P=(1,2) 與 Q=(-2,5) 的直線。

In [7]:
var('t')
P = vector([1, 2])
Q = vector([-2, 5])
d = Q - P
P, Q, d
Out[7]:
In [8]:
# 參數式:x(t), y(t)
x_t = P[0] + t*d[0]
y_t = P[1] + t*d[1]
x_t, y_t
Out[8]:

要轉成一般式:把 t 消去。
方向向量 d=(dx,dy) 的法向量可取 n=(dy,-dx)。
直線過 P,則一般式可寫成: $ n\cdot (X-P)=0 $ 其中 X=(x,y)。

下面用 Sage 做。

In [9]:
var('x y')
dx, dy = d[0], d[1]
n = vector([dy, -dx])  # 一個法向量
eq_line = n.dot_product(vector([x, y]) - P) == 0
eq_line
Out[9]:
In [10]:
# 展開成 Ax+By+C=0 的形式
expand(n.dot_product(vector([x, y]) - P))
Out[10]:

12.7 兩直線交點:解聯立方程¶

例:

  • L1:過 (1,2) 與 (-2,5)
  • L2:過 (0,0) 且方向向量 (1,1)(也就是 y=x)

求交點。

In [11]:
var('x y')
# L1 一般式(用上一節算到的式子)
L1 = expand(n.dot_product(vector([x, y]) - P)) == 0

# L2:y = x
L2 = y == x

sol = solve([L1, L2], [x, y])
sol
Out[11]:

也可以畫出兩條直線看交點是否合理。

(為了簡單,直接用 y=mx+b 形式畫線段。)

In [12]:
# 先把 L1 解成 y = mx + b(若斜率存在)
# 由 L1 解 y
sol_y = solve(L1, y)[0].rhs()
sol_y
Out[12]:
In [13]:
p = plot(sol_y, (x, -4, 4)) + plot(x, (x, -4, 4))
# 標出交點
ix = sol[0][0].rhs()
iy = sol[0][1].rhs()
p + point((ix, iy), size=50)
Out[13]:
No description has been provided for this image

12.8 點到直線距離:用法向量(高中常見公式的來源)¶

若直線一般式:$Ax+By+C=0$,點 $P(x_0,y_0)$,距離: $ d= rac{|Ax_0+By_0+C|}{\sqrt{A^2+B^2}} $

我們用向量/法向量的觀點理解:距離其實是「投影長度」。

例:點 R=(2,0) 到直線 L1 的距離¶

In [14]:
var('x y')
R = vector([2, 0])

# 取 L1 的一般式 Ax+By+C
expr_L1 = expand(n.dot_product(vector([x, y]) - P))  # =0
expr_L1
Out[14]:
In [15]:
# 讀出 A,B,C
A = expr_L1.coefficient(x)
B = expr_L1.coefficient(y)
C = expr_L1.subs({x:0, y:0})
A, B, C
Out[15]:
In [16]:
x0, y0 = R[0], R[1]
dist = abs(A*x0 + B*y0 + C)/sqrt(A^2 + B^2)
dist, N(dist)
Out[16]:

垂足(投影點)也能算:用「沿法向量走到線上」¶

若直線法向量為 n,點 R 到直線的垂足 H 可寫成: $ H = R - \lambda n $ 選 $\lambda$ 讓 H 落在直線上即可。

下面用 Sage 解 $\lambda$。

In [17]:
var('lam')
nvec = vector([A, B])  # 其實就是 n 的比例
H = R - lam*nvec

# H 在 L1 上:A*Hx + B*Hy + C = 0
eq = A*H[0] + B*H[1] + C == 0
sol_lam = solve(eq, lam)[0].rhs()
sol_lam
Out[17]:
In [18]:
H_point = H.subs(lam=sol_lam)
H_point
Out[18]:
In [19]:
# 驗算 RH 向量是否與直線方向 d 垂直(內積為 0)
RH = H_point - R
RH.dot_product(d)
Out[19]:

畫圖看點、直線、垂線與垂足:

In [20]:
var('x')
# L1: y = sol_y
p = plot(sol_y, (x, -4, 4))
p += point((R[0], R[1]), size=50) + point((H_point[0], H_point[1]), size=50)
# 畫出 R 到 H 的線段
p += line([(R[0], R[1]), (H_point[0], H_point[1])])
p
Out[20]:
No description has been provided for this image

12.9 平行與垂直:方向向量與內積¶

兩條直線:

  • 平行:方向向量平行(成比例)
  • 垂直:方向向量內積為 0

例:

  • L2:y = x,方向向量 (1,1)
  • 要找一條過點 (2,0) 且垂直於 L2 的直線

因為 (1,1) 的法向量就是 (1,-1),所以垂直線方向向量可取 (1,-1) 的垂直?
更直接:與 (1,1) 垂直的方向向量可取 (1,-1)(內積 0)。

因此直線參數式: (2,0) + t(1,-1)。

In [21]:
var('t x y')
P0 = vector([2, 0])
d_perp = vector([1, -1])

x_t = P0[0] + t*d_perp[0]
y_t = P0[1] + t*d_perp[1]
x_t, y_t
Out[21]:
In [22]:
# 轉成一般式:用法向量 n = (dy, -dx) = (-1, -1)(或任意比例)
n2 = vector([d_perp[1], -d_perp[0]])
eq = expand(n2.dot_product(vector([x, y]) - P0)) == 0
eq
Out[22]:
In [23]:
# 解出 y=mx+b 看看
solve(eq, y)[0].rhs()
Out[23]:

12.10 本章小結:用向量統一處理幾何¶

你現在應該能:

  • 用 vector 做加減、倍乘、長度、內積與夾角
  • 用投影理解「垂直分解」與點到直線距離
  • 以參數式/向量式建立直線,並能轉成一般式
  • 解聯立方程找直線交點,並用圖形驗證
  • 算點到直線距離與垂足,並驗算垂直性

練習題(附提示)¶

  1. 向量與夾角:給 u=(1,2), v=(2,-1),算 u·v、|u|、|v|、夾角(度)。
    提示:dot_product、norm()、arccos。

  2. 投影:把 u=(3,4) 投影到 v=(1,0) 上,解釋結果。
    提示:v=(1,0) 是 x 軸方向。

  3. 直線方程:求過 A=(1,-1)、B=(4,2) 的直線一般式。
    提示:方向 d=B-A,法向 n=(dy,-dx)。

  4. 交點:求直線 y=2x+1 與 x+y=4 的交點,並畫圖驗證。
    提示:solve([y==2*x+1, x+y==4],[x,y])。

5.(挑戰)點到直線距離:求點 (1,2) 到直線 3x-4y+5=0 的距離,並找垂足。
提示:距離公式 + 用 H=(x0,y0)-λ(A,B) 解 λ。

下一章(第 13 章)我們會把向量擴展到三維:
空間向量、平面、叉積、距離與立體幾何會變得更系統。