我在 2D 平面中有一个点 p 和 2 个线段。点 p 是摄像机朝向线段的位置。当从点 P 看时,我想检查线段 1 是否部分或完全隐藏在线 2 后面。
问问题
351 次
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 回答