标签: algorithm computational-geometry
给定一个点p和两个不相交(没有交点,甚至不在端点处)线段l1和l2,返回前面的"&# 34; (从p的角度来看覆盖另一个的那个)。总是会有一个人覆盖另一个。
p
l1
l2
我目前的方法是使用线段和p创建两个三角形。不包含另一个线段的点的三角形在前面。
三个例子:
左侧示例OQ位于前方,中间位置TU位于前方,右侧VW位于前方。
OQ
TU
VW
这个操作在我的应用程序中至关重要,这就是为什么我重视简单性,在任何情况下都必须正确。
答案 0 :(得分:3)
考虑从P开始并穿过其他四个点之一的光线。如果光线在到达点之前与另一条线段相交,则该点(以及包含该点的线段)位于另一条线段的后面。另一方面,如果光线在到达点之后与另一条线段相交,那么该点就在前面。
P
考虑你的第一个例子:
蓝色光线不与其他线段相交,因此它们不确定线段的顺序。绿色光线在相交O之前到达MN,因此O位于MN前方。红色光线在到达OQ之前与N相交,因此N位于OQ之后。
O
MN
N