¿Hay una manera más eficiente de detectar la superposición / intersección de polígonos que PathGeometry.FillContainsWithDetail ()?
Tengo un método que está engullendo el 25% de mi tiempo de CPU. Llamo a este método cerca de 27,000 veces por segundo. (Sí, muchas llamadas ya que se está actualizando con frecuencia). Me pregunto si alguien sabe una manera más rápida de detectar si 2 polígonos se superponen. Básicamente, tengo que verificar los objetos en movimiento en la pantalla contra los objetos estacionarios en la pantalla. Estoy usando PathGeometry y las dos llamadas a continuación están usando hasta el 25% del tiempo de CPU utilizado por mi programa. Los objetos PointCollection que estoy pasando solo contienen 4 puntos que representan las 4 esquinas de un polígono. Es posible que no creen un área rectangular, pero todos los puntos están conectados. Supongo que un trapazoide sería la forma.
Estos métodos son cortos y muy fáciles de implementar, pero creo que me gustaría optar por una solución más complicada si puedo hacer que se ejecute más rápido que el código a continuación. ¿Algunas ideas?
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;
}