Rechtecke überlappen



  • Hallo.

    Gibt es eine allgemeine mathematische Funktion, um festzustellen ob sich 2 Rechtecke in einem 2D Koordinatensystem überlappen?



  • Ein Rechteck A überlappt ein Rechteck B, wenn ein Eckpunkt von A im Rechteck von B liegt ODER ein Eckpunkt von B im Rechteck von A liegt

    ODER ist dabei als logisches oder und nicht als umgangssprachliches "entweder oder" zu deuten - der Unterschied wird klar wenn das komplette Rechteck A im Rechteck B liegt

    musst du die Rechtecke auch clippen? muss der Test schnell sein?



  • Wie hat jetzt eine solche Funktion(Formel) auszuschauen?
    Dein Text erinnert eher an eine Funktionsbeschreibung einer Programmierfunktion als an eine mathematische Formel 😉



  • Wie hat jetzt eine solche Funktion(Formel) auszuschauen?

    Das wird einfach eine abschnittsweise definierte Funktion



  • Vertexwahn schrieb:

    Ein Rechteck A überlappt ein Rechteck B, wenn ein Eckpunkt von A im Rechteck von B liegt ODER ein Eckpunkt von B im Rechteck von A liegt

    fast richtig

    333
       333
    EEE888EEE
    EEE888EEE
    EEE888EEE
       333
       333
    

    überlappung obwohl dein algorithmus false ausgibt.

    rapso->greets();



  • Sehr schönes Beispiel rapso.
    Aber es muss doch eine Formel geben um die Schnittmenge zweier Rechtecke rauszufinden. Wenn diese 0 ist, gibt es keine Überlappung. Sucht man in Google, so kommt man immer zu "Vereinigungs- und Schnittmenge zweier Rechtecke" MFC Befehle ^^

    Ich möchte aber die mathematische Formel dafür gern haben, da MFC mit (int) rechnet und ich float benötige 🙂



  • Sind die Rechtecke Achsenparallel?



  • man könnte einfach den Cohen Sutherland algo ein bischen umbauen...



  • Nein die Rechtecke können beliebig 360° gedreht sein.
    Schade, ich dachte es gibt eine einfachere Formel für soetwas 🙄



  • etwas triviales gibt es dafür nicht. das mußt du wohl leider ein paar formeln in einen algorithmus packen. mit einfachen schnittpunktberechnungen müßst du aber auskommen 😉

    rapso->greets();



  • minomin schrieb:

    Dein Text erinnert eher an eine Funktionsbeschreibung einer Programmierfunktion als an eine mathematische Formel 😉

    Mathematisch würde man es wohl eher so formulieren, was dir aber nicht viel hilft denke ich, da du es programmieren möchtest:
    \mbox{intersect}(R\_1,R\_2)=\left\{\begin{array}{c}1\quad R\_1\cap R\_2 \neq \emptyset\\0\quad R\_1\cap R\_2 = \emptyset\\\end{array}\right., wobei R\_i = \{x,y \in\mathbb{Z} : \mbox{R}\_i.\mbox{left} \leq x \leq \mbox{R}\_i.\mbox{right}, \mbox{R}\_i.\mbox{top} \leq y\leq \mbox{R}_i.\mbox{bottom}\}



  • Vielleicht hilft das hier weiter, zumindest wird in dem zugehörigen Applet auch die Schnittfläche eingefärbt.


Anmelden zum Antworten