这是一张图片:
\n\n\n\n我有两个向量:os,oe
\n\n它们之间的范围始终是从 os(开始)到 oe(结束)。
\n\n因此,在此图像中,两者之间的范围是 270\xc2\xb0 的角度。
\n\n然后我有两个向量要检查:oa,ob
\n\n正如你所看到的,向量 oa 应该在 osoe 形成的范围内,而向量 ob 应该在之外。
\n\n我想知道是否有一种方法可以仅使用向量数学(例如叉积点积)进行检查。
\n\n我尝试使用叉积进行顺时针/逆时针检查,但似乎当两者之间的角度大于 180\xc2\xb0 时,事情会变得复杂。
\n\n任何建议将不胜感激,谢谢:)
\n我将点 p 的向量表示为op。
计算叉积
c_se = cross(os, oe)
Run Code Online (Sandbox Code Playgroud)
如果c_se>=0 (角度 in 0..180 range),那么你必须检查是否
cross(os, op) >= 0 AND cross(op, oe) >= 0
Run Code Online (Sandbox Code Playgroud)
如果c_se < 0 (角180..360 range),那么你必须检查是否(OR而不是AND,正如马特在评论中注意到的那样)
cross(os, op) >= 0 OR cross(op, oe) >= 0
Run Code Online (Sandbox Code Playgroud)
旧版本 - 有点复杂:
NOT (cross(oe, op) >= 0 AND cross(op, os) >= 0)
Run Code Online (Sandbox Code Playgroud)