我怎么知道两个矢量是否接近平行

时间:2011-09-27 16:38:55

标签: vector orthogonal

由于浮点精度,我在查找并行向量时遇到了一些麻烦。如何确定向量是否与某个容差平行?

我还需要检查容差的正交性。

3 个答案:

答案 0 :(得分:7)

对于向量v1v2,检查它们是否正交

abs(scalar_product(v1,v2)/(length(v1)*length(v2))) < epsilon

其中epsilon足够小。类似地,你可以使用

scalar_product(v1,v2)/(length(v1)*length(v2)) > 1 - epsilon

用于并行性测试和

scalar_product(v1,v2)/(length(v1)*length(v2)) < -1 + epsilon

反对并行性。

答案 1 :(得分:2)

如果您有3D矢量,答案很简单。计算交叉积,如果它几乎为零,那么你的向量几乎是平行的: http://mathworld.wolfram.com/ParallelVectors.html

对于2D矢量,只需添加一个零坐标即可将它们转换为3D矢量 (1; 2)=&gt; (1; 2; 0),(4; 5.6)=&gt; (4; 5.6; 0)等等

如果点积为零,则两个向量是正交或垂直的: <击> http://mathworld.wolfram.com/CrossProduct.html

-edit http://mathworld.wolfram.com/Perpendicular.html

答案 2 :(得分:1)

如果您正在使用3D矢量工作,你可以做到这一点简洁使用工具区vg。它是numpy之上的一个轻层,它支持单个值和堆叠的向量。

import numpy as np
import vg

v1 = np.array([1.0, 2.0, 3.0])
v2 = np.array([-2.0, -4.0, -6.0])

vg.almost_collinear(v1, v2)
# True

我在上次启动时创建了该库,它的使用动机如下:在NumPy中冗长或不透明的简单想法。