1

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

4

2 回答 2

1

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

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

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

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

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

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

于 2009-11-19T11:19:47.607 回答
1

slurdge 的回答是一个好的开始,但比这要复杂一些。

如果线段 2 比线段 1 更靠近 C,它仍然可以看到,例如

A1-------A2

  B1-B2


   C

这里 B1 和 B2 在 A1A2 扇区“内”,但没有隐藏。

最难解决的是 B1 是否“介于”A1 和 A2 之间,但更靠近相机,而 B2 是否“不在”A1 和 A2 之间,但距离相机更远:

             B2

A1-----A2
 B1


   C

B1B2 可以剪切线段的边缘,从而使 B1B2 的一小部分隐藏(或者可能不隐藏!)。我认为你必须找到 A1A2 和 B1B2 的交集来检查这是否真的发生了。

于 2009-11-19T20:37:44.187 回答