如何检查一个向量是不是在两个向量内

Posted

技术标签:

【中文标题】如何检查一个向量是不是在两个向量内【英文标题】:How to check if a vector is within two vectors如何检查一个向量是否在两个向量内 【发布时间】:2017-04-13 03:40:53 【问题描述】:

这是一张图片:

我有两个向量:os, oe

它们之间的范围总是从 os(开始)到 oe(结束)。

所以在这张图片中,两者之间的角度是 270°。

然后我要检查两个向量:oa、ob

如你所见,向量 oa 应该在 osoe 形成的范围内,向量 ob 应该在外面。

我想知道是否有办法只使用向量数学(例如叉积点积)进行检查。

我尝试使用带有顺时针/逆时针检查的叉积,但似乎当两者之间的角度大于 180° 时,事情变得复杂了。

任何建议将不胜感激,谢谢:)

【问题讨论】:

这不是 *** 问题,因为它与编程完全无关。它应该在 This math site 上。虽然它可能不会因为重复而在那里被很好地接收。不过不妨试试 顺便说一下,二维平面 xy 上两个向量的叉积永远不会在二维平面 xy 上。它与平面正常(垂直),因此您无法使用叉积来计算。您应该只找到 oa 与 os 和 oe 之间的角度。这会告诉你它是在他们之间还是在他们的范围之外 我投票结束这个问题,因为它不是关于计算机编程的。 【参考方案1】:

我将指向 p 的向量表示为op

计算叉积

 c_se = cross(os, oe)

如果c_se>=0(角度在0..180 range),那么你必须检查是否

cross(os, op) >= 0 AND cross(op, oe) >= 0

如果c_se < 0(角度在180..360 range),那么你要检查是否

NOT (cross(oe, op) >= 0 AND cross(op, os) >= 0)

【讨论】:

以上是关于如何检查一个向量是不是在两个向量内的主要内容,如果未能解决你的问题,请参考以下文章

如何检查向量的所有元素是不是在 Eigen c++ 中的另一个向量中?

检查两个 std::function 是不是相等

如何检查 256i(16 位)向量以了解它是不是包含任何大于零的元素?

如何检查向量是否面向相同的方向

在 __m128i 向量上水平检查零?

在 C++ 中检查向量的所有元素是不是相等