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

Respuestas a la pregunta(1)

Su respuesta a la pregunta