gpt4 book ai didi

math - 如何确定一个向量是否在其他两个向量之间?

转载 作者:行者123 更新时间:2023-12-04 01:57:19 27 4
gpt4 key购买 nike

我正在寻找一种快速有效的方法来确定矢量 B 是否在矢量 A 和矢量 C 的小角度之间。通常我会使用垂直点积来确定每条线 B 的哪一边,但在这种情况下不是如此简单,原因如下:

  • 没有一个向量可以被假定为归一化,归一化它们是我宁愿避免的额外步骤。
  • 对于哪一边是最小的角度,我没有明确的概念,所以很难说这条线的哪一边好不好。
  • A 和 B 可能共线或正好相隔 180 度,在这种情况下我想返回 false。
  • 当我在 3D 环境中工作时,我很容易将其简化为 2D,如果这能让事情变得更容易,更重要的是更快。此测试将用于需要尽可能快地运行的算法。

  • 如果有一些简单有效的方法来确定我的垂直向量应该指向哪个方向,我可以使用两个点积进行测试。

    到目前为止,我一直在考虑但没有取得太大成功的另一种方法是使用矩阵。理论上,根据我对矩阵变换的理解,我应该能够使用 A 和 C 作为基向量。然后将 B 乘以矩阵 I 应该能够通过 X 和 Y 是否都是正数来测试 B 所在的象限。如果我能让这种方法起作用,它可能是最好的,因为一个矩阵乘法应该比两个点积快,而且我不必担心哪一边的角度最小。

    问题出在我的测试中,我不能简单地使用 A 和 C 作为基础并将其相乘并获得正确的行为。我真的不确定我在这里做错了什么。我已经多次遇到术语“向量空间”,我认为这与矩阵变换非常相似,对正交基或正交基没有任何要求。它和矩阵一样吗?如果没有,是否有更好的方法,我将如何使用它?

    只是为了更直观地解释我在说什么:

    Rough example

    @Aki Suihkonen
    我似乎无法让它工作。编写了一个我可以运行的模拟案例,看看我是否想不出什么

    对于这种情况,使用

    斧头 2.9579773 斧头 3.315979

    Cx 2.5879822 Cy 5.1630249

    对于 B,我围绕四个象限旋转,向量将空间分成几部分。

    我得到的迹象:
    - 对于第一季度 --- 对于第二季度 +-- 第三季度 +-- 第 4 季度 --
    假设我在环境中以与图像相同的方向旋转,我相当确定我做到了。

    Quadrants

    最佳答案

    我认为 Aki 的解决方案很接近,但在某些情况下它不起作用:

    从他的解决方案:

    return (ay * bx - ax * by) * (ay * cx - ax * cy) < 0;


    这相当于检查 B 和 A 之间的叉积是否与 C 和 A 之间的叉积具有相同的符号。

    叉积 (U x V) 的符号告诉您 V 是位于 U 的一侧还是另一侧(板外,板内)。在大多数坐标系中,如果 U 需要逆时针旋转(出板),则符号为正。

    所以 Aki 的解决方案会检查 B 是否需要向一个方向旋转才能到达 A,而 C 需要向另一个方向旋转。如果是这种情况,则 B 不在 A 和 C 之内。当您不知道 A 和 C 的“顺序”时,此解决方案不起作用,如下所示:

    enter image description here

    要确定 B 是否在 A 和 C 内,您需要双向检查。即从A到B的旋转方向应与从A到C的旋转方向相同,从C到B的旋转方向应与从C到A的旋转方向相同。

    这简化为:

    if (AxB * AxC >= 0 && CxB * CxA >= 0)

    // then B is definitely inside A and C

    关于math - 如何确定一个向量是否在其他两个向量之间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13640931/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com