Finden Sie die überlappende Fläche der beiden Rechtecke (in C#)

Edit:

Einfachen code, den ich verwendet, um das problem zu lösen falls es jemanden interessiert (Dank an Fredrik):

    int windowOverlap(Rectangle rect1, Rectangle rect2)
    {
        if (rect1.IntersectsWith(rect2))
        {
            Rectangle overlap = Rectangle.Intersect(rect1, rect2);
            if (overlap.IsEmpty)
                return overlap.Width * overlap.Height;
        }

        return 0;
    }

Ursprünglichen Frage:

Ich würde gerne wissen, eine schnelle und schmutzige Art und Weise zu überprüfen, ob sich zwei Rechtecke überlappen und wenn Sie das tun, berechnen Sie die Fläche der überlappung. Für Neugier Willen, ich bin interessiert in dem Fall, wo 1) alle Zeilen, die in beiden Rechtecke sind entweder vertikal oder horizontal, oder 2) der Allgemeine Fall für beliebige zwei Rechtecke, aber die einzige Antwort, die ich wirklich brauche, ist Fall 1.

Ich denke entlang der Linien von:

double areaOfOverlap( Rect A, Rect B)
{
    if ( A.Intersects(B) )
    {
        //calculate area
        //return area
    }

    return 0;
}

A. Intersects () - ich dachte, mit der Trennung von Achse zu testen, aber wenn die Rechtecke werden nur horizontale und vertikale Linien gibt es eine einfachere (schnellere) Möglichkeit dies zu überprüfen?

Und für die Berechnung der Fläche, wo Sie sich kreuzen, gibt es eine schnelle Möglichkeit, es zu tun, wenn die Rechtecke werden nur horizontale und vertikale Linien?

Schließlich, dies ist unabhängig von der Frage, aber ich würde schätzen jede Beratung jemand vielleicht ein gutes Buch /Homepage, wo ich konnte, überprüfen Sie die Mathematik für die Computergrafik. Ich habe aus der Schule für eine Weile und das Gefühl, ich bin vergessen alles :)! Sonst noch jemand das problem?

( ANMERKUNG: ich fand diese Frage anders als diese das scheint komplizierter und nicht direkt die Frage beantworten. )

Ein horizontales Rechteck ist ein vertikales Rechteck, hängt davon ab, auf welcher Seite Sie prüfen die Spitze.
if (überlappen.IsEmpty) sollte if (!überschneiden sich.IsEmpty)

InformationsquelleAutor Evan | 2009-10-11

Schreibe einen Kommentar