向量除法——标量乘法的逆运算
一、問題提出
已知一個n維向量A,和一個標量k,可將它們進行標量乘法運算,得到向量B——
B = kA
那么,若只知兩個共線的向量A、B,如何求k呢,既——
k = B/A = ?
二、解決辦法
我們可以將上下均乘以(點積,dot product)“A”——
k = B/A
= (B . A)/(A . A)
= (B . A)/( |A|^2 )
= (b1*a1 + b2*a2 + b3*a3 + ... + bn*an) / ( a1*a1 + a2*a2 + a3*a3 + ... + an*an )
三、幾何解釋、推廣到非共線向量
先回憶一下向量點積的的幾何算法——
A . B = |A| * |B| * cos(th)
注:th是兩個向量的夾角
將上式除以 |A|(向量A的模長),可得出向量B在向量A上的投影的模長——
| Prj(B)A | = |A| * |B| * cos(th) / |A| = |B| * cos(th)
將投影的模長再除以 |A|,既是 投影模長在總長度的比例——
k = | Prj(B)A | / |A| = (|B|/|A|) * cos(th)
對于共線向量而言,很明顯,就是先前欲求的標量k值。
對于非共線向量而言,則是投影向量的相關k值。
也就是說,不論是否共線,該除法都有值(除非A是零向量)。
在很多時候,這個特性很有用。比如在寫圖形編輯系統時,需要計算點擊位置是線段的哪一部分。因為鼠標點擊坐標是有理數(比例尺),而線段的斜率有可能是無理數,這會造成兩個向量不是共線的。而本文的除法算法,可以穩健的處理這一情況。而且投影向量更符合一般的操作習慣。
?
總結
以上是生活随笔為你收集整理的向量除法——标量乘法的逆运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV_轮廓的查找、表达、绘制、特
- 下一篇: ASP.NET的地址重写“.NET研究”