Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 二维多边形裁剪_C#_Unity3d - Fatal编程技术网

C# 二维多边形裁剪

C# 二维多边形裁剪,c#,unity3d,C#,Unity3d,我有两个多边形,一个总是凸的,另一个可以是凸的或凹的。这些多边形上的顶点按逆时针方向排序 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++) {

我有两个多边形,一个总是凸的,另一个可以是凸的或凹的。这些多边形上的顶点按逆时针方向排序

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);
            }
        }
    }
for(int i=0;i
使用这个循环,我可以找到边的交点。问题在于,根据凸多边形所在的位置,查找交点的顺序会发生变化。有没有办法保证交点总是以相同的顺序找到

编辑: 例- 2个多边形A(代码中的排序数组)和B(代码中的其他多边形数组)。A是静态的,可以是凹面的。B在移动,并且总是凸的


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

你能更详细地描述一下“相同顺序”的交叉点是什么意思吗?如果位置不同,则交点也不同。相同的顺序是否表示沿凸多边形(测试多边形)顺时针/逆时针方向,或者完全不同的东西,比如它们应该按照交叉点本身的
Vector2
值来排序?@Foggzie我写了一个例子,其中的问题是,你能更详细地描述一下交叉点的“相同顺序”吗?如果位置不同,则交点也不同。相同的顺序是否意味着沿着凸多边形、测试多边形或完全不同的东西顺时针/逆时针方向排列,就像它们应该按照交点本身的
Vector2
值进行排序一样?@Foggzie I写了一个例子来说明这个问题