2D几何:如何检查一个点是否在角度内

9

我在2D中有以下几何问题:

我有一个点,从这个点向外投射一个无限角度(2D圆锥),由一个方向和一个角度确定。(点和方向形成一个向量,每个方向的一半形成2D圆锥)

现在我想检查另一个2D点是否在这个圆锥内或外。

如何实现这个目标? 谢谢!


1
语言不应该成为问题;我相信OP想要的是算法。 - Paul Sonier
是的,那是个好观点,丹尼尔,"2D中的点"是什么意思? - Paul Sonier
是的,语言并不重要,我只是在寻找算法。如果您用文字描述它,那也可以。如果圆锥体是三维的,我不确定应该用什么英文单词代替,抱歉。 - clamp
2
圆锥在二维情况下也完全可以使用。不过,你也可以在二维情况下使用“扇形”。 - EFraim
4个回答

15

计算从圆锥中心到查询点的向量。将该向量归一化为长度为1,同样将圆锥中心向量归一化为长度为1。
现在取两个向量之间的点积。归一化后的两个向量的点积是它们之间夹角的余弦值。对点积取反余弦函数(在大多数编程语言中使用acos),您将获得该角度。将此角度与圆锥的角度(即您描述的半角)进行比较,如果小于,则问题点位于圆锥内。

这适用于2D和3D。


谢谢,实际上这就是我一直在做的事情,但我只是没有意识到点的实际位置被考虑在哪里,所以我认为它还没有完成。现在我明白了。谢谢! - clamp
绝妙的解决方案。请注意,您可以预先计算“半锥角余弦”,然后只需在点积结果和该余弦值之间使用“小于”比较即可,无需使用反余弦函数——当然,只要点积结果为正,以避免让一个点“落在”锥体后面。如果针对同一锥体检查多个点,则此方法非常有用。 - R. Navega

1

使用方向的反正切计算方向的角度。从检查点中减去原点。通过归一化向量的反正切再次计算其角度,并检查它是否位于角度边界内。


1
我认为最好的方法是将该点投影到垂直于锥体方向的二维表面上。然后,您可以计算该平面与该点之间的正交距离。最后,您可以知道在该高度处锥体的宽度,以便确定该点是否超出该宽度。

1

让从原点到指定点的向量与穿过中心的法线成角A。如果角度A小于锥体半角,则它在内部,否则在外部。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接