文章目录
-
- [一、先搞清楚 d=q-p 在这里的作用](#一、先搞清楚 d=q-p 在这里的作用)
- 二、关键来了:4×4矩阵里面到底藏着什么?
- 三、既然如此,为什么还要构造4×4矩阵?
- 四、这里还有一个容易忽略的地方
- 五、最后总结
- 问题1
- [一、为什么 m 的方向与直线的位置有关?](#一、为什么 m 的方向与直线的位置有关?)
- [二、为什么 m 的长度能够表示原点到直线的距离?](#二、为什么 m 的长度能够表示原点到直线的距离?)
- 三、举一个例子,你就能直接看出来
- 四、但这里还有一个很容易忽略的问题
- [五、更深入一步:能不能从 m 和 d 反推出直线的位置?](#五、更深入一步:能不能从 m 和 d 反推出直线的位置?)
- 六、最后回到你的原始理解
在上一篇的第12.5节中,写道:
例如
d = q − p \boxed{\mathbf d=\mathbf q-\mathbf p} d=q−p
然后又写:
m = p × q \boxed{\mathbf m=\mathbf p\times\mathbf q} m=p×q
这两个公式,最后说它们与4×4反对称矩阵的6个独立元素对应。
其实跳过了最关键的一步:为什么4×4矩阵中的元素,会变成方向向量 d \mathbf d d 和矩向量 m \mathbf m m?
这次我们把它完整推导出来。
一、先搞清楚 d=q-p 在这里的作用
假设三维空间中有两个点:
P = ( 1 , 2 , 3 ) , Q = ( 4 , 6 , 3 ) P=(1,2,3),\qquad Q=(4,6,3) P=(1,2,3),Q=(4,6,3)
我们知道两个不同的点确定一条直线。
这条直线的方向向量就是:
d = q − p \mathbf d=\mathbf q-\mathbf p d=q−p
因此:
d = ( 3 , 4 , 0 ) \mathbf d=(3,4,0) d=(3,4,0)
这里的 p \mathbf p p 和 q \mathbf q q 是两个点相对于原点的位置向量,而 d \mathbf d d 是从 P 指向 Q 的向量。
现在,如果我们想用 Plücker 坐标表示这条直线,就需要两个三维向量:
( d , m ) \boxed{(\mathbf d,\mathbf m)} (d,m)
其中:
d = q − p \mathbf d=\mathbf q-\mathbf p d=q−p
m = p × q \mathbf m=\mathbf p\times\mathbf q m=p×q
你之前已经知道:
m = p × d \mathbf m=\mathbf p\times\mathbf d m=p×d
为什么又变成 p × q \mathbf p\times\mathbf q p×q?
因为:
m = p × d = p × ( q − p ) = p × q − p × p = p × q \begin{aligned} \mathbf m &=\mathbf p\times\mathbf d\\ &=\mathbf p\times(\mathbf q-\mathbf p)\\ &=\mathbf p\times\mathbf q-\mathbf p\times\mathbf p\\ &=\mathbf p\times\mathbf q \end{aligned} m=p×d=p×(q−p)=p×q−p×p=p×q
最后一步利用了:
p × p = 0 \mathbf p\times\mathbf p=0 p×p=0
所以:
m = p × d = p × q \boxed{ \mathbf m=\mathbf p\times\mathbf d=\mathbf p\times\mathbf q } m=p×d=p×q
这里的目的只有一个:
把 Plücker 坐标完全表示成两个点 P、Q 的函数,从而与原文的4×4矩阵公式建立联系。
二、关键来了:4×4矩阵里面到底藏着什么?
L = p ~ q ~ T − q ~ p ~ T \boxed{ \mathbf L=\tilde{\mathbf p}\tilde{\mathbf q}^{T} -\tilde{\mathbf q}\tilde{\mathbf p}^{T} } L=p~q~T−q~p~T
先不管它为什么这么构造。
假设:
p ~ = ( p x p y p z 1 ) , q ~ = ( q x q y q z 1 ) \tilde{\mathbf p}= \begin{pmatrix} p_x\\p_y\\p_z\\1 \end{pmatrix}, \qquad \tilde{\mathbf q}= \begin{pmatrix} q_x\\q_y\\q_z\\1 \end{pmatrix} p~= pxpypz1 ,q~= qxqyqz1
那么:
L = ( 0 p x q y − p y q x p x q z − p z q x p x − q x p y q x − p x q y 0 p y q z − p z q y p y − q y p z q x − p x q z p z q y − p y q z 0 p z − q z q x − p x q y − p y q z − p z 0 ) \mathbf L= \begin{pmatrix} 0 & p_xq_y-p_yq_x & p_xq_z-p_zq_x & p_x-q_x\\ p_yq_x-p_xq_y & 0 & p_yq_z-p_zq_y & p_y-q_y\\ p_zq_x-p_xq_z & p_zq_y-p_yq_z & 0 & p_z-q_z\\ q_x-p_x & q_y-p_y & q_z-p_z & 0 \end{pmatrix} L= 0pyqx−pxqypzqx−pxqzqx−pxpxqy−pyqx0pzqy−pyqzqy−pypxqz−pzqxpyqz−pzqy0qz−pzpx−qxpy−qypz−qz0
这个矩阵看着复杂,但我们只看其中两部分。
第一部分:最后一行
最后一行是:
( q x − p x , q y − p y , q z − p z , 0 ) (q_x-p_x,\ q_y-p_y,\ q_z-p_z,\ 0) (qx−px, qy−py, qz−pz, 0)
你发现了吗?
前三个数恰好就是:
d = q − p \boxed{\mathbf d=\mathbf q-\mathbf p} d=q−p
所以矩阵最后一行的前三个元素,就是直线方向向量的三个分量。
第二部分:左上角的3×3矩阵
我们之前学习过叉乘:
m = p × q \mathbf m=\mathbf p\times\mathbf q m=p×q
展开:
m = ( p y q z − p z q y p z q x − p x q z p x q y − p y q x ) \boxed{ \mathbf m= \begin{pmatrix} p_yq_z-p_zq_y\\ p_zq_x-p_xq_z\\ p_xq_y-p_yq_x \end{pmatrix} } m= pyqz−pzqypzqx−pxqzpxqy−pyqx
分别记作:
m = ( m x , m y , m z ) \mathbf m=(m_x,m_y,m_z) m=(mx,my,mz)
现在观察刚才4×4矩阵左上角的部分:
( 0 m z − m y − m z 0 m x m y − m x 0 ) \begin{pmatrix} 0&m_z&-m_y\\ -m_z&0&m_x\\ m_y&-m_x&0 \end{pmatrix} 0−mzmymz0−mx−mymx0
它里面是不是正好包含:
m x , m y , m z m_x,\quad m_y,\quad m_z mx,my,mz
这三个数?
因此,整个矩阵实际上可以写成:
L = ( 0 m z − m y − d x − m z 0 m x − d y m y − m x 0 − d z d x d y d z 0 ) \boxed{ \mathbf L= \begin{pmatrix} 0&m_z&-m_y&-d_x\\ -m_z&0&m_x&-d_y\\ m_y&-m_x&0&-d_z\\ d_x&d_y&d_z&0 \end{pmatrix} } L= 0−mzmydxmz0−mxdy−mymx0dz−dx−dy−dz0
这就是第12.5节真正想说明的事情!
看起来复杂的4×4矩阵,实际上只包含两组三维向量:
d = ( d x , d y , d z ) \boxed{ \mathbf d=(d_x,d_y,d_z) } d=(dx,dy,dz)
m = ( m x , m y , m z ) \boxed{ \mathbf m=(m_x,m_y,m_z) } m=(mx,my,mz)
其中:
- d \mathbf d d 描述直线的方向。
- m \mathbf m m 描述直线相对于原点的位置。
矩阵中的其余元素,只是这6个数的重复、取负或者0。
三、既然如此,为什么还要构造4×4矩阵?
这是一个很自然的问题。
既然:
( d , m ) (\mathbf d,\mathbf m) (d,m)
已经可以表示三维直线,为什么原文还要使用:
L = p ~ q ~ T − q ~ p ~ T \mathbf L= \tilde{\mathbf p}\tilde{\mathbf q}^T- \tilde{\mathbf q}\tilde{\mathbf p}^T L=p~q~T−q~p~T
这种看起来更麻烦的形式?
主要是因为:
矩阵形式可以直接使用齐次坐标进行计算,而且对有限点和无穷远点都适用。
例如:
p ~ = ( 1 , 2 , 3 , 1 ) \tilde{\mathbf p}=(1,2,3,1) p~=(1,2,3,1)
表示一个普通有限点。
而:
q ~ = ( 1 , 0 , 0 , 0 ) \tilde{\mathbf q}=(1,0,0,0) q~=(1,0,0,0)
表示一个沿 x 轴方向的无穷远点。
我们仍然可以使用同一个公式:
L = p ~ q ~ T − q ~ p ~ T \mathbf L= \tilde{\mathbf p}\tilde{\mathbf q}^T- \tilde{\mathbf q}\tilde{\mathbf p}^T L=p~q~T−q~p~T
得到经过 P 且平行于 x 轴的直线。
它不要求两个点都必须是普通的有限点。
而且在射影变换中,矩阵形式也比较方便。
四、这里还有一个容易忽略的地方
你可能会想:
既然 d = q − p \mathbf d=\mathbf q-\mathbf p d=q−p,那么只要知道两个点,直接计算方向不就好了?
确实如此。
但方向向量只能决定直线朝向,不能唯一决定直线的位置。
例如:
直线1:
r 1 = ( 1 , 0 , 0 ) + t ( 0 , 1 , 0 ) \mathbf r_1=(1,0,0)+t(0,1,0) r1=(1,0,0)+t(0,1,0)
直线2:
r 2 = ( 5 , 0 , 0 ) + t ( 0 , 1 , 0 ) \mathbf r_2=(5,0,0)+t(0,1,0) r2=(5,0,0)+t(0,1,0)
两条直线的方向完全相同:
d = ( 0 , 1 , 0 ) \mathbf d=(0,1,0) d=(0,1,0)
但位置不同。
计算矩向量:
对于直线1:
m 1 = ( 1 , 0 , 0 ) × ( 0 , 1 , 0 ) \mathbf m_1=(1,0,0)\times(0,1,0) m1=(1,0,0)×(0,1,0)
m 1 = ( 0 , 0 , 1 ) \boxed{\mathbf m_1=(0,0,1)} m1=(0,0,1)
对于直线2:
m 2 = ( 5 , 0 , 0 ) × ( 0 , 1 , 0 ) \mathbf m_2=(5,0,0)\times(0,1,0) m2=(5,0,0)×(0,1,0)
m 2 = ( 0 , 0 , 5 ) \boxed{\mathbf m_2=(0,0,5)} m2=(0,0,5)
所以两条直线的 Plücker 坐标分别为:
( d , m 1 ) = ( ( 0 , 1 , 0 ) , ( 0 , 0 , 1 ) ) (\mathbf d,\mathbf m_1)=((0,1,0),(0,0,1)) (d,m1)=((0,1,0),(0,0,1))
( d , m 2 ) = ( ( 0 , 1 , 0 ) , ( 0 , 0 , 5 ) ) (\mathbf d,\mathbf m_2)=((0,1,0),(0,0,5)) (d,m2)=((0,1,0),(0,0,5))
这就成功区分了两条平行但位置不同的直线。
五、最后总结
第12.5节想表达的其实是下面这条关系:
已知直线上两个不同的有限点:
p , q \mathbf p,\mathbf q p,q
首先计算方向:
d = q − p \boxed{\mathbf d=\mathbf q-\mathbf p} d=q−p
然后计算矩向量:
m = p × q \boxed{\mathbf m=\mathbf p\times\mathbf q} m=p×q
接着,把这6个数排列成4×4反对称矩阵:
L = ( 0 m z − m y − d x − m z 0 m x − d y m y − m x 0 − d z d x d y d z 0 ) \boxed{ \mathbf L= \begin{pmatrix} 0&m_z&-m_y&-d_x\\ -m_z&0&m_x&-d_y\\ m_y&-m_x&0&-d_z\\ d_x&d_y&d_z&0 \end{pmatrix} } L= 0−mzmydxmz0−mxdy−mymx0dz−dx−dy−dz0
这个矩阵恰好等于:
L = p ~ q ~ T − q ~ p ~ T \boxed{ \mathbf L= \tilde{\mathbf p}\tilde{\mathbf q}^T- \tilde{\mathbf q}\tilde{\mathbf p}^T } L=p~q~T−q~p~T
所以,原文的4×4矩阵与前面介绍的方向向量、矩向量,并不是两套互不相关的表示方法。它们表示的是同一条三维直线。
你现在不必死记这个4×4矩阵。现阶段真正需要理解的是:
两个点确定一条直线 → 两点之差得到方向 → 两点位置向量叉乘得到矩向量 → 方向和矩向量合起来表示整条直线。
还有一个我觉得值得你继续思考的问题:既然 m = p × d \mathbf m=\mathbf p\times\mathbf d m=p×d 是垂直于 p \mathbf p p 和 d \mathbf d d 的向量,那么它为什么还能描述直线相对于原点的位置?
这个问题一旦理解,Plücker 坐标的几何意义就会清晰很多。
问题1
既然 m = p × d \mathbf m=\mathbf p\times\mathbf d m=p×d 是垂直于 p \mathbf p p 和 d \mathbf d d 的向量,那么它为什么还能描述直线相对于原点的位置?直觉上可能是因为m是由p和q叉乘得到的,而p和q是相对于原点的位置向量,叉乘是求与两个向量的同时垂直的向量,所以限制了直线的位置?
你的直觉基本是正确的,而且你已经抓住了最关键的一点:
因为 p \mathbf p p 和 q \mathbf q q 是相对于原点的位置向量,所以它们的叉乘必然包含直线相对于原点的位置信息。
但需要进一步澄清:
m \mathbf m m 不仅仅通过"垂直关系"限制了直线的位置,它的方向和长度共同编码了直线相对于原点的位置。
其中有一个很漂亮的几何关系:
- m \mathbf m m 的方向:表示原点与直线所确定的平面的法向方向。
- m \mathbf m m 的长度 :等于原点到直线的垂直距离乘以方向向量 d \mathbf d d 的长度。
- d \mathbf d d 和 m \mathbf m m 一起:可以唯一确定三维空间中的一条直线。
我们一步步解释。
一、为什么 m 的方向与直线的位置有关?
假设三维空间中有一条直线:
r = p + t d \mathbf r=\mathbf p+t\mathbf d r=p+td
其中:
- O = ( 0 , 0 , 0 ) O=(0,0,0) O=(0,0,0):坐标原点。
- P P P:直线上的一个点。
- p = O P → \mathbf p=\overrightarrow{OP} p=OP :原点指向 P 的向量。
- d \mathbf d d:直线的方向向量。
现在想象:
从原点 O 出发,向这条直线上的所有点连线。
这些连线会形成什么?
只要这条直线不经过原点,它们就位于同一个平面内。
这个平面由两个向量张成:
p , d \mathbf p,\quad\mathbf d p,d
所以:
m = p × d \boxed{\mathbf m=\mathbf p\times\mathbf d} m=p×d
得到的正是这个平面的法向量。
这说明了什么?
假设一条直线沿 x 轴方向延伸。
如果它位于原点上方,那么原点和直线所确定的平面,可能是 xz 平面。
如果它位于原点前方,那么对应的平面可能是 xy 平面。
这两种情况下,叉乘得到的 m \mathbf m m 的方向就不同。
因此:
m \mathbf m m 的方向告诉我们:直线位于经过原点、且包含直线方向的哪个平面内。
不过,这还不能唯一确定直线。
因为在同一个平面内,可以存在无数条平行直线。
我们还需要距离信息。
二、为什么 m 的长度能够表示原点到直线的距离?
这一步是整个问题的核心。
你之前学习叉乘时,我们讨论过:
对于两个向量:
a , b \mathbf a,\mathbf b a,b
叉乘的模长是:
∥ a × b ∥ = ∥ a ∥ ∥ b ∥ sin θ \boxed{ \|\mathbf a\times\mathbf b\|= \|\mathbf a\|\|\mathbf b\|\sin\theta } ∥a×b∥=∥a∥∥b∥sinθ
其中 θ \theta θ 是两个向量之间的夹角。
从几何上讲,它等于两个向量张成的平行四边形的面积。
现在:
m = p × d \mathbf m=\mathbf p\times\mathbf d m=p×d
因此:
∥ m ∥ = ∥ p ∥ ∥ d ∥ sin θ \|\mathbf m\|= \|\mathbf p\|\|\mathbf d\|\sin\theta ∥m∥=∥p∥∥d∥sinθ
注意其中这一部分:
∥ p ∥ sin θ \|\mathbf p\|\sin\theta ∥p∥sinθ
它代表什么?
假设从原点 O 向直线作垂线,垂足是 H。
由于 θ \theta θ 是 p \mathbf p p 与 d \mathbf d d 的夹角,所以:
O H = ∥ p ∥ ∣ sin θ ∣ \boxed{ OH=\|\mathbf p\||\sin\theta| } OH=∥p∥∣sinθ∣
这里 O H OH OH 正好就是原点到直线的最短距离。
记作:
h = O H h=OH h=OH
因此:
∥ m ∥ = h ∥ d ∥ \boxed{ \|\mathbf m\|=h\|\mathbf d\| } ∥m∥=h∥d∥
如果我们使用单位方向向量:
∥ d ^ ∥ = 1 \|\hat{\mathbf d}\|=1 ∥d^∥=1
那么:
∥ m ∥ = h \boxed{ \|\mathbf m\|=h } ∥m∥=h
这意味着:
当 d \mathbf d d 是单位向量时, m \mathbf m m 的长度恰好等于原点到直线的最短距离。
是不是很有意思?
原本你觉得叉乘只是在求一个垂直向量,但它实际上还包含一个非常重要的量:面积。
而面积除以底边长度,就是高度。
这里的高度恰好就是原点到直线的距离。
三、举一个例子,你就能直接看出来
假设有两条直线,它们都沿 y 轴正方向延伸。
第一条:
L 1 : r = ( 1 , 0 , 0 ) + t ( 0 , 1 , 0 ) L_1:\quad \mathbf r=(1,0,0)+t(0,1,0) L1:r=(1,0,0)+t(0,1,0)
第二条:
L 2 : r = ( 3 , 0 , 0 ) + t ( 0 , 1 , 0 ) L_2:\quad \mathbf r=(3,0,0)+t(0,1,0) L2:r=(3,0,0)+t(0,1,0)
方向向量相同:
d = ( 0 , 1 , 0 ) \mathbf d=(0,1,0) d=(0,1,0)
且:
∥ d ∥ = 1 \|\mathbf d\|=1 ∥d∥=1
第一条直线
选择:
p 1 = ( 1 , 0 , 0 ) \mathbf p_1=(1,0,0) p1=(1,0,0)
计算:
m 1 = p 1 × d \mathbf m_1=\mathbf p_1\times\mathbf d m1=p1×d
即:
( 1 , 0 , 0 ) × ( 0 , 1 , 0 ) (1,0,0)\times(0,1,0) (1,0,0)×(0,1,0)
得到:
m 1 = ( 0 , 0 , 1 ) \boxed{\mathbf m_1=(0,0,1)} m1=(0,0,1)
长度:
∥ m 1 ∥ = 1 \|\mathbf m_1\|=1 ∥m1∥=1
原点到这条直线的距离也确实是1。
第二条直线
选择:
p 2 = ( 3 , 0 , 0 ) \mathbf p_2=(3,0,0) p2=(3,0,0)
计算:
m 2 = ( 3 , 0 , 0 ) × ( 0 , 1 , 0 ) \mathbf m_2=(3,0,0)\times(0,1,0) m2=(3,0,0)×(0,1,0)
得到:
m 2 = ( 0 , 0 , 3 ) \boxed{\mathbf m_2=(0,0,3)} m2=(0,0,3)
长度:
∥ m 2 ∥ = 3 \|\mathbf m_2\|=3 ∥m2∥=3
原点到第二条直线的距离也确实是3。
所以:
| 第一条直线 | 第二条直线 | |
|---|---|---|
| 方向 d \mathbf d d | ( 0 , 1 , 0 ) (0,1,0) (0,1,0) | ( 0 , 1 , 0 ) (0,1,0) (0,1,0) |
| 矩向量 m \mathbf m m | ( 0 , 0 , 1 ) (0,0,1) (0,0,1) | ( 0 , 0 , 3 ) (0,0,3) (0,0,3) |
| 原点到直线距离 | 1 | 3 |
两条直线方向相同,但相对于原点的位置不同,因此矩向量也不同。
四、但这里还有一个很容易忽略的问题
你可能注意到了:
刚才两条直线都位于 x 轴正方向。
假设现在我再增加一条直线:
L 3 : r = ( − 3 , 0 , 0 ) + t ( 0 , 1 , 0 ) L_3:\quad\mathbf r=(-3,0,0)+t(0,1,0) L3:r=(−3,0,0)+t(0,1,0)
它也沿 y 轴方向延伸。
原点到它的距离同样是3。
那么它的矩向量是多少?
m 3 = ( − 3 , 0 , 0 ) × ( 0 , 1 , 0 ) \mathbf m_3=(-3,0,0)\times(0,1,0) m3=(−3,0,0)×(0,1,0)
得到:
m 3 = ( 0 , 0 , − 3 ) \boxed{\mathbf m_3=(0,0,-3)} m3=(0,0,−3)
你发现了吗?
第二条直线:
m 2 = ( 0 , 0 , 3 ) \mathbf m_2=(0,0,3) m2=(0,0,3)
第三条直线:
m 3 = ( 0 , 0 , − 3 ) \mathbf m_3=(0,0,-3) m3=(0,0,−3)
它们的长度一样:
∥ m 2 ∥ = ∥ m 3 ∥ = 3 \|\mathbf m_2\|=\|\mathbf m_3\|=3 ∥m2∥=∥m3∥=3
但是方向相反。
因此:
- m \mathbf m m 的长度包含距离信息。
- m \mathbf m m 的方向还包含直线位于哪一侧的信息。
所以必须同时考虑方向和长度,才能区分这些直线。
五、更深入一步:能不能从 m 和 d 反推出直线的位置?
这是我认为最能帮助你真正理解 Plücker 坐标的一步。
既然我们声称:
( d , m ) (\mathbf d,\mathbf m) (d,m)
可以唯一确定一条直线,那么应该能够从它们反推出直线上的某个点。
答案是:可以。
而且我们可以直接求出直线上距离原点最近的点 H。
已知:
m = p × d \mathbf m=\mathbf p\times\mathbf d m=p×d
现在用 d \mathbf d d 去叉乘 m \mathbf m m:
d × m = d × ( p × d ) \mathbf d\times\mathbf m= \mathbf d\times(\mathbf p\times\mathbf d) d×m=d×(p×d)
根据向量三重积恒等式:
a × ( b × c ) = b ( a ⋅ c ) − c ( a ⋅ b ) \mathbf a\times(\mathbf b\times\mathbf c)= \mathbf b(\mathbf a\cdot\mathbf c)- \mathbf c(\mathbf a\cdot\mathbf b) a×(b×c)=b(a⋅c)−c(a⋅b)
得到:
d × m = p ∥ d ∥ 2 − d ( d ⋅ p ) \mathbf d\times\mathbf m= \mathbf p\|\mathbf d\|^2- \mathbf d(\mathbf d\cdot\mathbf p) d×m=p∥d∥2−d(d⋅p)
两边除以 ∥ d ∥ 2 \|\mathbf d\|^2 ∥d∥2:
d × m ∥ d ∥ 2 = p − p ⋅ d ∥ d ∥ 2 d \frac{\mathbf d\times\mathbf m}{\|\mathbf d\|^2}= \mathbf p- \frac{\mathbf p\cdot\mathbf d}{\|\mathbf d\|^2}\mathbf d ∥d∥2d×m=p−∥d∥2p⋅dd
右边是什么?
它等于从位置向量 p \mathbf p p 中减去沿直线方向的投影。
剩下的就是:
从原点指向直线最近点 H 的向量。
因此:
h = d × m ∥ d ∥ 2 \boxed{ \mathbf h= \frac{\mathbf d\times\mathbf m}{\|\mathbf d\|^2} } h=∥d∥2d×m
如果 d \mathbf d d 是单位向量:
h = d × m \boxed{ \mathbf h=\mathbf d\times\mathbf m } h=d×m
例如:
d = ( 0 , 1 , 0 ) \mathbf d=(0,1,0) d=(0,1,0)
m = ( 0 , 0 , 3 ) \mathbf m=(0,0,3) m=(0,0,3)
那么:
h = ( 0 , 1 , 0 ) × ( 0 , 0 , 3 ) \mathbf h=(0,1,0)\times(0,0,3) h=(0,1,0)×(0,0,3)
结果:
h = ( 3 , 0 , 0 ) \boxed{\mathbf h=(3,0,0)} h=(3,0,0)
这恰好是刚才第二条直线上距离原点最近的点!
于是我们就可以重新构造出整条直线:
r = h + t d \boxed{ \mathbf r=\mathbf h+t\mathbf d } r=h+td
这就证明了:
只要知道方向向量 d \mathbf d d 和矩向量 m \mathbf m m,就可以还原三维直线的位置和方向。
六、最后回到你的原始理解
你说:
直觉上可能是因为 m 是由 p 和 q 叉乘得到的,而 p 和 q 是相对于原点的位置向量,叉乘是求与两个向量同时垂直的向量,所以限制了直线的位置?
你的理解可以进一步完善成:
第一层: p \mathbf p p 和 q \mathbf q q 是相对于原点的位置向量,它们张成的平面包含原点和直线 PQ。因此叉乘得到的 m \mathbf m m 的方向,描述了这个平面的朝向。
第二层: 叉乘得到的不仅是一个垂直方向,它的长度还等于对应平行四边形的面积。这个面积包含了原点到直线的距离信息。
第三层: 当直线方向 d \mathbf d d 已知时,利用 m \mathbf m m 的方向和长度,就可以确定原点到直线最近的点,从而确定整条直线。
最终:
d = q − p (确定直线方向) m = p × d (包含直线相对原点的位置信息) \boxed{ \begin{aligned} \mathbf d&=\mathbf q-\mathbf p &&\text{(确定直线方向)}\\6pt \mathbf m&=\mathbf p\times\mathbf d &&\text{(包含直线相对原点的位置信息)} \end{aligned} } dm=q−p=p×d(确定直线方向)(包含直线相对原点的位置信息)
有一个特别重要的认识:叉乘不仅给出了垂直方向,还通过模长保留了两个向量张成的面积信息。Plücker 坐标正是巧妙地利用了叉乘的这两个性质。
不过,我还想提醒你一个细节:当直线经过原点时, m = 0 \mathbf m=0 m=0,这是完全正常的。这时候方向 d \mathbf d d 加上"直线经过原点"这个信息,依然足够唯一确定直线。