向量除法——标量乘法的逆运算

一、问题提出

  已知一个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是零向量)。
  在很多时候,这个特性很有用。比如在写图形编辑系统时,需要计算点击位置是线段的哪一部分。因为鼠标点击坐标是有理数(比例尺),而线段的斜率有可能是无理数,这会造成两个向量不是共线的。而本文的除法算法,可以稳健的处理这一情况。而且投影向量更符合一般的操作习惯。

原文地址:https://www.cnblogs.com/zyl910/p/Vector_Division.html