![]() |
Überlappung bei Rechtecken
Morgen.
Ich steh grad total aufm Schlauch. Ich brauche eine Funktion, die zurückgibt, ob sich zwei Rechtecke mit gegebenen Koordinaten überschneiden und eine andere, die das Schnittrechteck zurückgibt. Ein Denkanstoß und evtl. Pseudocode wären gut... Danke im Voraus. |
Re: Überlappung bei Rechtecken
Nimm IntersectRect() und du hast beides.
Grüße vom marabu |
Re: Überlappung bei Rechtecken
Java. Nicht Delphi. Sonst hätt ichs ja unter "Sonstige Fragen zu Delphi" gepostet.
Außerdem sollen wir wohl eine eigene Funktion schreiben. |
Re: Überlappung bei Rechtecken
Mal einen Denkanstoss:
die Rechtecke haben die Koordinaten (AL, AT, AR, AB) bzw. (BL, BT, BR, BB) fuer (Links, Oben, Rechts, Unten), wobei der erste Buchstabe das Rechteck angibt. Die Rechtecke ueberschneiden sich dann, wenn mindestens eine Ecke eines Rechtecks in der Flaeche des anderen Rechtecks liegt. Ich zeigs mal fuer ein Rechteck. Damit sie sich ueberlappen, muss folgendes zutreffen:
Du kannst das natuerlich auch umgekehrt machen; jedenfalls gilt: wenn eine Ecke von Rechteck A in Rechteck B liegt, so muss mindestens eine Ecke von Rechteck B in Rechteck A liegen ;) Wenn eben eine dieser Bedingungen zutrifft, ueberlappen sich die Rechtecke. Die Ueberlappungsflaeche laesst sich dann anhand der zutreffenden Ecke sehr schnell finden. Greetz alcaeus |
Re: Überlappung bei Rechtecken
So ähnlich hab ichs mir auch schon gedacht...
Aber ich hab dann nicht mehr weitergemacht, weil ich mir irgendwie dumm dabei vorgekommen bin, vier if-Abfragen zu schreiben... Und außerdem bin ich hundemüde... Das kann ja was werden, wenn ich am 27. Klausur schreib... Danke jedenfalls. |
Re: Überlappung bei Rechtecken
Zitat:
Code:
Ist zwar rein mathematisch, die Leserlichkeit sei allerdings dahingestellt...
struct Rectangle
{ int l; //left int r; //right int t; //top int b; //bottom } bool Overlaying(Rectangle r1, Rectangle r2) { return ((((r1.r-r1.l+r2.r-r2.l)/2)-(java.lang.Math.abs(r1.l+r1.r-r2.l-r2.r)/2))<0?0:1+((java.lang.Math.abs(r1.t+r1.b-r2.t-r2.b)/2)-((r1.b-r1.t+r2.b-r2.t)/2))>0?0:1)>0; } Auf Herz und Nieren getestet hab ichs auch nich, aber von Gedanken und Implementierung her muessts passen. greetz Mike |
Re: Überlappung bei Rechtecken
Zitat:
Gute Nacht marabu |
Re: Überlappung bei Rechtecken
Also, diese Übungen sind freiwillig, ist ja auch an der Uni. Werden nicht bewertet, darum wollte ich ja auch "nur" einen Denkanstoß bzw. Pseudocode.
Wo ich IntersectRect finde, wusste ich nicht, ich dachte, die entsprechende Unit wäre nicht als Source in Delphi dabei. Und wie du das mit den Kanten meinst, weiß ich nicht. |
Re: Überlappung bei Rechtecken
In der Mathematik bezeichnet man die Seiten als Kanten.
BTW. Mit 15 an der Uni. Respekt ;-) |
Re: Überlappung bei Rechtecken
Ich weiß was Kanten sind (so doof bin ich jetzt wieder auch ned. ;) ), aber ich weiß nicht, was dadurch leichter wird, wenn ich Kanten und nicht Ecken betrachte.
Und, ich sage es nochmal, das nennt sich Schülerstudium, sind bis zu 3 Kurse (jeweils mit Klausur), der erste hat schon angefangen und den mache ich jetzt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz