由于浮点精度,我在查找并行向量时遇到了一些麻烦。如何确定向量是否与某个容差平行?
我还需要检查容差的正交性。
答案 0 :(得分:7)
对于向量v1
和v2
,检查它们是否正交
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 击>
答案 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中冗长或不透明的简单想法。