我正在寻找一种快速有效的方法来确定向量B是否位于向量A和向量C之间的小角度内。通常我会使用垂直点积来确定B在每条线的哪一侧,但由于以下原因,这种方法并不简单:
- 不能假设任何向量都已归一化,而归一化它们是我希望避免的额外步骤。
- 我没有清晰的概念来确定最小角度的哪一侧是好的或不好的。
- A和B可能共线或正好相隔180度,在这种情况下我想返回false。
- 虽然我在三维环境中工作,但如果能使事情更简单、更重要的是更快地运行,那么将其简化为二维就很容易了。这个测试将用于需要尽可能快地运行的算法中。
如果有一种简单有效的方法可以确定我的垂直向量应该指向哪个方向,我可以使用两个点积进行测试。
我一直在考虑另一种方法,但迄今为止没有太大成功,即使用矩阵。理论上,从我对矩阵变换的理解中,我应该能够使用A和C作为基向量。然后通过矩阵乘法将B乘以矩阵,我应该能够通过X和Y都为正来测试B位于哪个象限内。如果我能使这种方法起作用,那么它可能是最好的,因为一次矩阵乘法应该比两个点积快,而且我不必担心哪一侧具有最小的角度。
问题在于从我的测试中,我不能简单地将A和C作为基础并正常地进行矩阵乘法,以获得正确的行为。我真的不确定我在做什么方面出了问题。我多次遇到过“向量空间”这个术语,据我所知,它似乎是一个非常类似于矩阵变换的概念,没有对正交基或标准正交基的任何要求。它是否与矩阵相同?如果不是,可能有更好的方法吗?我应该如何使用它?
只是为了更好地解释我所说的:
@Aki Suihkonen 我好像无法让它工作。编写了一个我可以运行的模拟案例,看看能否找出问题。
对于这种情况,使用:
Ax 2.9579773 Ay 3.315979
Cx 2.5879822 Cy 5.1630249
对于B,我围绕向量将空间划分为四个象限进行旋转。
我得到的符号是:
- 对于Q1 --
- 对于Q2 +-
- 对于Q3 +-
- 对于Q4 --
假设我沿着与图像相同的方向在环境中旋转,我相当确定我已经这样做了。