2009-09-17 9 views
9

Ich schrieb eine Zeichenfunktion, die verschiedene Sprites auf dem Bildschirm zeichnet. Diese Sprites können sich nur bis zu einem Punkt überlappen. Wenn sie sich viel überlappen müssen, werden sie zu verdunkelt. Als Ergebnis muss ich erkennen, wenn diese Sprites zu viel überlappen. Glücklicherweise wird das Problem dadurch vereinfacht, dass die Sprites als orthogonale Rechtecke behandelt werden können. Ich würde gerne wissen, wie sehr sich diese Rechtecke überlappen. Im Moment zwinge ich es einfach dazu, jedes Pixel in einem Rechteck zu testen, um zu sehen, ob es das andere enthält. Ich zähle diese und berechne die prozentuale Überlappung. Ich denke, es gibt wahrscheinlich einen besseren, weniger brutalen Ansatz. Mit welchem ​​Algorithmus kann ich das ermitteln?Wie können Sie die prozentuale Überlappung zweier Rechtecke berechnen?

Ich benutze wxwidgets.

+0

Was haben Sie so weit gekommen? Sind das Hausaufgaben? – Donut

+0

Riecht wie Hausaufgaben? –

+1

Ist das eine Hausaufgabenfrage? Außerdem sollten Sie den "Prozentsatz" klarer definieren. Ihre Frage kann auf mindestens zwei Arten interpretiert werden, z. B. als Prozentsatz der gesamten überdachten Fläche, die von beiden Rechtecken belegt wird, oder als Prozentsatz der Fläche von rect1, die von rect2 abgedeckt wird. – jprete

Antwort

9

Die Ergebnisse hängt davon ab, wie Sie sich überlappenden Prozentsatz definieren, um es zu halten symmetrisch, ich würde es so Code:

double CalculatePercentOverlap(const wxRect& rect1, const wxRect& rect2) 
{ 
    wxRect inter = rect1.Intersect(rect2); 
    if (inter.IsEmpty()) 
    return 0; 
    return (double)(inter.GetWidth()*inter.GetHeight()) * 2.0/
    (double)(rect1.GetWidth()*rect1.GetHeight() + 
      rect2.GetWidth()*rect2.GetHeight()); 
} 
+0

Ahh du bist brillant. Wusste nicht von der Schnittpunktfunktion. Hey, die Leute ärgern sich darüber, dass sie wie eine Hausaufgabe aussehen. Ich war in meiner Befragung zu knapp. Also werde ich es wahrscheinlich löschen. Löscht das Entfernen Ihrer Punkte, wenn ich es belasse. Vielen Dank. – max

+0

Behandeln die wxRect-Objekte Rechtecke, die nicht parallel zu den Achsen sind? – baumgart

+1

@max - es würde die Punkte entfernen, wenn sein rep neu berechnet würde, was schließlich passieren wird –

Verwandte Themen