【问题标题】:Check if vector is on other side of a line检查向量是否在直线的另一侧
【发布时间】:2017-10-22 12:18:55
【问题描述】:

我正在尝试检查向量的新位置是否越过给定的线。

我知道原始向量的坐标,以及它的新位置。 我要检查它是否交叉的线始终垂直于向量原始位置方向。 并且直线与零的距离始终相同。

我正在使用threejs,因此可以访问他们所有的数学/向量函数。然而,这只是二维的。

这里有两张图片来说明。我想检查黑点是否越过红线。

编辑

如果有人需要查看此代码,感谢@beta 下面的回答。它实际上是为了阻止一个点离另一个物体的中心太近

canPointMoveTo(originalPos, newPos) {
  const minDistance = 40;
  const k = originalPos.clone().normalize();
  const newDotProduct = newPos.dot(k);

  return newDotProduct >= minDistance;
}

【问题讨论】:

    标签: javascript math vector three.js


    【解决方案1】:

    调用从原点到直线的距离,D。
    调用向量 v0v1
    取旧向量 v0,对其进行归一化,并将该向量称为 k

    k = v0/|v0|

    现在要找出向量在直线的哪一侧,将其与 k 的点积与 D 进行比较。

    当且仅当旧向量和新向量位于线的不同边时,向量“越线”​​:

    {v0 。 k > D 和 v1 。 k v0 。 k v1 。 k > D}。

    【讨论】:

    • 这听起来会奏效!我现在试一试并报告,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多