我在 2D 平面上有一个点 p 和 2 条线段。点 p 是相机朝向线段观察的视图位置。我想检查当从 P 点看时,线段 1 是否部分或完全隐藏在线 2 后面。

有帮助吗?

解决方案

我认为问题是第二行是否被第一行“掩盖”。

假设您的相机点是 C,您的线段是 A1、A2 和 B1、B2。

我将计算叉积 CA1xCB1 和 CA2xCB2。符号告诉您 B1 点是在 CA1 线的左侧还是右侧。这取决于三角形 CA1A2 和 CB1B2 的方向(它们必须方向相同,有很多方法可以做到这一点)。

然后,您可以使用该标志来了解您是否处于以下情况:

  • CA1xCB1 为负或 CA2xCB2 为正,则部分可见
  • 反之,则隐藏。

您还可以计算 CA1xCB2 和 CA2xCB1 以获得细粒度的情况。

其他提示

slurdge的回答是一个良好的开端,但它是比这更复杂一些。

如果线段2更靠近下比线段1,它仍然是可见的,e.g。

A1-------A2

  B1-B2


   C

下面B1和B2是 “范围内” A1A2扇区,但不隐藏。

最难一个制定出是如果B 1为“之间” A1和A2,但更接近摄像机,而B2是A1和A2“不”之间,但进一步从相机:

             B2

A1-----A2
 B1


   C

B1B2可以裁剪的线段的边缘,从而使B1B2隐藏的一小部分(或也许不是!)。我想你会发现A1A2和B1B2的交叉检查这是否实际发生。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top