Esempio n. 1
0
        private void ComputeIntersections(Polygon polygonA, Polygon polygonB)
        {
            var polyCountA = polygonA.PointCount;
            var polyCountB = polygonB.PointCount;

            //todo close polygon

            var dictSecPointsA = new Dictionary <PolygonPoint, List <PolygonPoint> >();
            var dictSecPointsB = new Dictionary <PolygonPoint, List <PolygonPoint> >();

            for (int i = 0; i < polyCountA - 1; i++)
            {
                var pointA1 = polygonA[i];
                var pointA2 = polygonA[i + 1];

                for (int j = 0; j < polyCountB - 1; j++)
                {
                    var pointB1 = polygonB[j];
                    var pointB2 = polygonB[j + 1];

                    PolygonPoint intersectionPointA;
                    PolygonPoint intersectionPointB;
                    var          doesIntersect = triangleIntersector.EdgeAgainsEdge(pointA1, pointA2, pointB1, pointB2, 0, 1, out intersectionPointA, out intersectionPointB);

                    if (!doesIntersect)
                    {
                        continue;
                    }

                    AddIntersectionPoint(dictSecPointsA, pointA1, intersectionPointA);
                    AddIntersectionPoint(dictSecPointsB, pointB1, intersectionPointB);
                }
            }

            polygonA.AddIntersectionPoints(dictSecPointsA);
            polygonA.AddIntersectionPoints(dictSecPointsB);
        }