4ecke per mausklick setzten...dürfen sich nicht überlappen
-
hallo alle zusammen,
ich habe folgendes problem und bekomme das einfach nicht hin.
ich habe ein kleins pogramm, bei dem man per mausklickt vierecke zeichnen kann, also an der stelle wo man klickt, wird ein viereck gezeichnet und die koordinaten des vierecks speichere ich in einer liste. für jeden klick wird ein element hinten an die liste angehängt.
im moment ist es möglich, dass man quasi mehrere 4ecke aufeinander legen kann, bzw. man kann die 4ecke so nah aneinanderlegen, dass sie sich überlappen.ich wollte das nun so gestalten, dass es nicht möglich ist, dass sich dir 4 ecke überlappen, also wenn man klickt und das neue viereck würde sich mit einem bereits bestehenden überlappen, soll keins gesetzt werden.
dazu wollte ich einfach die gesamte liste durchgehen nach jedem klick und die koordinaten der einzelnen elemente, also der bereits bestehenden 4ecke auslesen und mit den aktuell geklickten koordinaten vergleichen und daraus dann abhängig ein viereck zeichnen lassen oder eben nicht. die liste durchlaufen usw. ist kein problem, ich weiß aber nicht, wie ich den vergleich anstellen soll. ich habe schon eine menge probiert, aber es funktioniert nix richtig.
wäre toll,w enn da jemanden etwas zu einfällt. im moment haben die vierecke eine kantenlänge von 10.
würde mich freuen, wenn mich da jemand weiter bringen könnte.
vielen dank schonmal
gruß
steffi
-
das nich c++ sondern winapi ode DX
-
es ist weder winapi, noch dx. auch wenn es nicht ein c++ - spezifisches problem ist, passt es doch wohl am besten hier her...
heißt bei dir viereck das gleiche wie quadrat? oder sind die vierecke "wirkliche" vierecke? (beliebige positionen der ecken)
im falle von rechtecken/quadraten, die zudem noch parallel zu den koordinatenachsen liegen, brauchst du nur zu prüfen, ob die rechts untere ecke eines rechteckes "größer" als die links obere ecke des 2. rechteckes ist.
if (r1.bottom < r2. top && r1.right < r2.left) //rechtecke liegen ineinander else //hier dann wohl net
-
wenn ih das so mache, dann müssen die 4ecke doch nicht unbeding ineinander liegen. wenn r1.bottem < r2.rop ist, kann doch das 4eck r2 am oberen bildschirmrand liegen und das r1 am unteren und obwohl die bedingung erfüllt ist, liegen sie nicht ineinander. das gleich gilt für den vergleich auf der x-achse.... oder sehe ich das falsch?
-
Hallo Stefanie,
ich hatte vor kurzen in einem Projekt das selbe Problem. Die Lösung ist:
"Eine Überlappung ist vorhanden, wenn in allen (hier 2) Dimensionen eine Überlappung stattfindet – also folgende Bedingung erfüllt ist:
min( A ) < max( B ) UND max( A ) > min( B )"Bzw. in Code
if( ( a.left() < b.right() && a.right() > b.left() ) // 1.Dim && ( a.bottom() < b.top() && a.top() > b.bottom() ) ) // 2.Dim { // Überlappung vorhanden'a', 'b' sind die Vierecke
[left(); right()] ist Intervall in horizontaler Richtung
[bottom(); top()] ist Intervall in senkrechter Richtung - ggf. vertauschen, wenn Intervall = [top(); bottom()].
Wenn Du < und > nach <= und >= änderst, ist die Bedingung 'Überlappung 'auch bei Berührung erfüllt.Gruß
Werner
-
hallo,
vielen dank. das funktioniert ja prima.
vielen dank allen für die hilfe.
gruß
steffi