Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Überlappung bei Rechtecken (https://www.delphipraxis.net/67370-ueberlappung-bei-rechtecken.html)

3_of_8 13. Apr 2006 20:32


Ü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.

marabu 13. Apr 2006 20:37

Re: Überlappung bei Rechtecken
 
Nimm IntersectRect() und du hast beides.

Grüße vom marabu

3_of_8 13. Apr 2006 20:40

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.

alcaeus 13. Apr 2006 20:42

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:
  • Links oben im Rechteck: AL in BL..BR && AT in BT..BB
  • Links unten im Rechteck: AL in BL..BR && AB in BT..BB
  • Rechts unten im Rechteck: AR in BL..BR && AB in BT..BB
  • Rechts oben im Rechteck: AR in BL..BR && AT in BT..BB

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

3_of_8 13. Apr 2006 20:47

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.

JasonDX 13. Apr 2006 21:49

Re: Überlappung bei Rechtecken
 
Zitat:

Zitat von 3_of_8
Aber ich hab dann nicht mehr weitergemacht, weil ich mir irgendwie dumm dabei vorgekommen bin, vier if-Abfragen zu schreiben...

Falls keine ifs dabeisein sollen koennte ich mit sowas dienen:
Code:
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;
}
Ist zwar rein mathematisch, die Leserlichkeit sei allerdings dahingestellt...
Auf Herz und Nieren getestet hab ichs auch nich, aber von Gedanken und Implementierung her muessts passen.

greetz
Mike

marabu 13. Apr 2006 22:40

Re: Überlappung bei Rechtecken
 
Zitat:

Zitat von 3_of_8
Java. Nicht Delphi. Sonst hätt ichs ja unter "Sonstige Fragen zu Delphi" gepostet.

In welcher Sprache du InterSectRect() implementierst bleibt doch dir überlassen. In Delphi sind es sehr übersichtliche fünf Zeilen Code. Wenn ich meine Funktion jetzt hier hin schreibe, dann verstoße ich sicher gegen den Hausaufgabenhilfe-Paragraphen. Außerdem wirst du dann antworten, dass du es dir schon ganz ähnlich gedacht hattest. Deshalb nur ein Hinweis: der Code wird viel kompakter, wenn du die Kanten und nicht die Ecken betrachtest.

Gute Nacht

marabu

3_of_8 13. Apr 2006 22:52

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.

mkinzler 13. Apr 2006 23:41

Re: Überlappung bei Rechtecken
 
In der Mathematik bezeichnet man die Seiten als Kanten.

BTW. Mit 15 an der Uni. Respekt ;-)

3_of_8 14. Apr 2006 00:49

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.
Seite 1 von 2  1 2      

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