Existe uma maneira mais eficiente de detectar sobreposição / interseção de polígonos do que PathGeometry.FillContainsWithDetail ()?

Eu tenho um método que está devorando 25% do meu tempo de CPU. Eu chamo esse método cerca de 27.000 vezes por segundo. (Sim, muitas chamadas desde que está atualizando freqüentemente). Eu estou querendo saber se alguém sabe uma maneira mais rápida de detectar se dois polígonos se sobrepõem. Basicamente, eu tenho que verificar os objetos em movimento na tela contra objetos estacionários na tela. Eu estou usando o PathGeometry e as duas chamadas abaixo estão usando até 25% do tempo de CPU usado pelo meu programa. Os objetos PointCollection que estou passando contêm apenas 4 pontos representando 4 cantos de um polígono. Eles não podem criar uma área retangular, mas todos os pontos estão conectados. Eu acho que um trapazoid seria a forma.

Esses métodos são curtos e muito fáceis de implementar, mas acho que posso optar por uma solução mais complicada se puder executá-la mais rapidamente do que o código abaixo. Alguma ideia?

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