8

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

我还需要检查具有公差的正交性。

4

3 回答 3

12

对于向量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

为反平行。

于 2011-09-27T16:41:26.887 回答
3

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

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

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

-编辑http://mathworld.wolfram.com/Perpendicular.html

于 2011-09-27T16:45:06.023 回答
0

如果您正在使用 3D 矢量,则可以使用 toolbelt 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 中冗长或不透明的简单想法。

于 2019-04-04T13:16:51.430 回答