У меня есть метод, который потребляет 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;
}