向量除法——标量乘法的逆运算
2011-10-17 22:38
232 查看
一、问题提出
已知一个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是零向量)。
在很多时候,这个特性很有用。比如在写图形编辑系统时,需要计算点击位置是线段的哪一部分。因为鼠标点击坐标是有理数(比例尺),而线段的斜率有可能是无理数,这会造成两个向量不是共线的。而本文的除法算法,可以稳健的处理这一情况。而且投影向量更符合一般的操作习惯。
已知一个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是零向量)。
在很多时候,这个特性很有用。比如在写图形编辑系统时,需要计算点击位置是线段的哪一部分。因为鼠标点击坐标是有理数(比例尺),而线段的斜率有可能是无理数,这会造成两个向量不是共线的。而本文的除法算法,可以稳健的处理这一情况。而且投影向量更符合一般的操作习惯。
相关文章推荐
- 实现整数的乘法,减法和除法运算。只允许使用加号
- 计算机如何实现乘法与除法运算
- 移位,逻辑运算实现加法,乘法和除法
- 移位运算为什么比乘法除法快
- 二进制乘法和除法与移位运算的关系
- JAVA对于乘法除法和模运算的优化,是否需要转换成位运算
- 程序员面试金典: 9.7位操作 7.4只用加号实现整数的乘法、减法和除法运算
- (PHP实现)只使用++运算实现加法,减法,乘法,除法
- JS的乘法,除法,取模,加法,减法运算
- 在8位单片机中的浮点数运算---开方,乘法,除法,反正切
- 只使用++运算实现加法,减法,乘法,除法PHP实现
- python中如何的快速进行除法、乘法运算
- Sass基本特性--运算(加法、减法、乘法、除法、变量运算、数字运算、颜色运算、字符运算)
- 取模、乘法和除法运算在CPU和GPU上的效率
- 9.7数学与概率(二)——实现整数的乘法、减法和除法运算,只允许使用加号
- (PHP实现)只使用++运算实现加法,减法,乘法,除法
- 实现整数的乘法、减法和除法运算,只允许使用加号
- c笔试面试 之 不用乘法操作(用逻辑运算)实现两个正整数的除法
- 大数运算,队列实现大数 加法、乘法、除法、模除
- 浮点加法、减法, 乘法、除法运算