Czy istnieje bardziej skuteczny sposób wykrywania nakładania / przecięcia wielokątów niż PathGeometry.FillContainsWithDetail ()?

Mam metodę, która pochłania 25% mojego czasu procesora. Nazywam tę metodę około 27 000 razy na sekundę. (Tak, dużo połączeń od czasu, gdy często się aktualizuje). Zastanawiam się, czy ktokolwiek zna szybszy sposób na wykrycie nakładania się dwóch wielokątów. Zasadniczo muszę sprawdzić ruchome obiekty na ekranie względem nieruchomych obiektów na ekranie. Używam PathGeometry, a dwa poniższe połączenia zużywają 25% czasu procesora używanego przez mój program. Obiekty PointCollection, które mijam, zawierają tylko 4 punkty reprezentujące 4 rogi wielokąta. Nie mogą tworzyć prostokątnego obszaru, ale wszystkie punkty są połączone. Myślę, że trapazoidem byłby kształt.

Metody te są krótkie i bardzo łatwe do wdrożenia, ale myślę, że chciałbym wybrać bardziej skomplikowane rozwiązanie, jeśli mogę je uruchomić szybciej niż poniższy kod. Jakieś pomysły?

public static bool PointCollectionsOverlap(PointCollection area1, PointCollection area2)
{
    PathGeometry pathGeometry1 = GetPathGeometry(area1);
    PathGeometry pathGeometry2 = GetPathGeometry(area2);
    return pathGeometry1.FillContainsWithDetail(pathGeometry2) != IntersectionDetail.Empty;
}

public static PathGeometry GetPathGeometry(PointCollection polygonCorners)
{
    List<PathSegment> pathSegments = new List<PathSegment> 
                                         { new PolyLineSegment(polygonCorners, true) };
    PathGeometry pathGeometry = new PathGeometry();
    pathGeometry.Figures.Add(new PathFigure(polygonCorners[0], pathSegments, true));
    return pathGeometry;
}

questionAnswers(1)

yourAnswerToTheQuestion