2D多边形裁剪

时间:2017-11-08 18:03:53

标签: c# unity3d

我有2个多边形,一个是凸面,另一个是凸面或凹面。这些多边形上的顶点逆时针排序。

for(int i = 0; i < sorted.Count; i++)
    {
        Vector2 start1 = sorted[i];
        Vector2 end1 = sorted[(i + 1) % sorted.Count];
        for(int j = 0; j < otherPolygon.Count; j++)
        {
            Vector2 start2 = otherPolygon[j];
            Vector2 end2 = otherPolygon[(j + 1) % otherPolygon.Count];

            Vector2 intersection = Intersection(start1, end1, start2, end2);
            if (!float.IsPositiveInfinity(intersection.x))
            {
                intersections.Add(intersection);
            }
        }
    }

使用这个循环我可以找到边的交点。问题在于,根据凸多边形的位置,我找到交点的顺序会发生变化。有没有办法保证交叉点始终以相同的顺序找到?

编辑: 示例案例 - 2多边形A(代码中的排序数组)和B(代码中的otherPolygon数组)。 A是静态的,可以是凹的。 B在四处移动并且总是凸起的。

如果B位于A的右侧并且相交,则按顺时针顺序找到交点。如果B在左侧,则以逆时针顺序找到交叉点。

0 个答案:

没有答案