Есть ли более эффективный способ обнаружения перекрытия / пересечения полигонов, чем PathGeometry.FillContainsWithDetail ()?

У меня есть метод, который поглощает 25% моего процессорного времени. Я называю этот метод около 27 000 раз в секунду. (Да, много звонков, так как он часто обновляется). Мне интересно, если кто-нибудь знает более быстрый способ обнаружить, если 2 полигона перекрываются. По сути, я должен проверять движущиеся объекты на экране и неподвижные объекты на экране. Я использую PathGeometry, и два приведенных ниже вызова занимают до 25% времени процессора, используемого моей программой. Проходящие мимо объекты PointCollection содержат 4 точки, представляющие 4 угла многоугольника. Они могут не создавать прямоугольную область, но все точки связаны между собой. Я предполагаю, что трапазоид был бы формой.

Эти методы короткие и их было очень легко реализовать, но я думаю, что я мог бы выбрать более сложное решение, если бы я мог запустить его быстрее, чем приведенный ниже код. Есть идеи?

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;
}

Ответы на вопрос(1)

Ваш ответ на вопрос