计算几何-通过叉积判断向量旋转方向

简明结论

先简单给出结论,我们考虑二维向量 x ⃗ = ( a , b ) , y ⃗ = ( c , d ) \vec{x}=(a,b),\vec{y}=(c,d) x =(a,b),y =(c,d) , 若

  • x ⃗ × y ⃗ : = a × d − b × c = = 0 \vec{x}\times\vec{y}:=a\times d-b\times c==0 x ×y :=a×db×c==0 , 则 两向量共线
  • x ⃗ × y ⃗ : = a × d − b × c > 0 \vec{x}\times\vec{y}:=a\times d-b\times c>0 x ×y :=a×db×c>0, 则 y ⃗ \vec{y} y x ⃗ \vec{x} x 左侧
  • x ⃗ × y ⃗ : = a × d − b × c < 0 \vec{x}\times\vec{y}:=a\times d-b\times c<0 x ×y :=a×db×c<0, 则 y ⃗ \vec{y} y x ⃗ \vec{x} x 右侧计算几何-通过叉积判断向量旋转方向_第1张图片
    计算几何-通过叉积判断向量旋转方向_第2张图片

一般结论

右手定则:掏出你的右手,四指指向 x ⃗ \vec{x} x , 然后转向 y ⃗ \vec{y} y ,此时你的大拇指方向就是你的叉积方向。

使用时, 可以直接认为垂直纸面向上是正值,垂直纸面向下是负值。以此可以反推旋转方向。

数学推导

如果是在三维空间中的向量叉积由下示行列式定义:

∣ i j k x i y i z i x j y j z j ∣ \left|\begin{array}{cccc} i&j&k\\ x_i&y_i&z_i\\ x_j&y_j&z_j \end{array}\right| ixixjjyiyjkzizj

其中 i , j , k i,j,k i,j,k 分别表示三个正交的方向,且其系数即结果向量各方向之值。不难发现两个向量之叉积为另一个向量。那么我们对二维向量求叉积得到的为什么是个标量呢?

事实上,在实际使用的过程中,我们考虑将原二维平面的向量视为三维向量,并且将其 z z z 轴填充为0。 这样实质上我们将原二维空间投影到了一个三维空间中的 z = 0 z=0 z=0 平面。于是我们有下式:

a ⃗ × b ⃗ = ∣ i j k x i y i 0 x j y j 0 ∣ = 0 ⋅ i + 0 ⋅ j + ( x i y j − x j y i ) ⋅ k \vec{a}\times\vec{b}= \left|\begin{array}{cccc} i&j&k\\ x_i&y_i&0\\ x_j&y_j&0 \end{array}\right| = 0\cdot i + 0\cdot j + (x_iy_j-x_jy_i)\cdot k a ×b =ixixjjyiyjk00=0i+0j+(xiyjxjyi)k

也即得到了一个沿着 z z z 轴方向竖直向上的向量。因为这个向量再和原来的坐标轴无关,所以在二维环境下我们为了简化表述,直接将其表示为一个标量,也即文章开头结论中的两积之差。并且定义方向为上得到的是正值,方向为下得到的是负值。

为了方便记忆,引入右手定则,如第二部分所言。当你把你的桌面想象成 z = 0 z=0 z=0 平面时,那么就可以根据旋转方向得到叉积的正负性,从而推断旋转的方向。

值得一提的是,该叉积也等于两向量模和sin夹角之积,与点积恰好对应。数值绝对值恰好等于两向量围成三角形之面积。

你可能感兴趣的:(计算几何)