AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Überlappung bei Rechtecken

Ein Thema von 3_of_8 · begonnen am 13. Apr 2006 · letzter Beitrag vom 14. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#1

Überlappung bei Rechtecken

  Alt 13. Apr 2006, 20:32
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 20:37
Nimm IntersectRect() und du hast beides.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 20:40
Java. Nicht Delphi. Sonst hätt ichs ja unter "Sonstige Fragen zu Delphi" gepostet.

Außerdem sollen wir wohl eine eigene Funktion schreiben.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 20:42
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
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 20:47
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#6

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 21:49
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
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 22:40
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
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 22:52
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Überlappung bei Rechtecken

  Alt 13. Apr 2006, 23:41
In der Mathematik bezeichnet man die Seiten als Kanten.

BTW. Mit 15 an der Uni. Respekt
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Überlappung bei Rechtecken

  Alt 14. Apr 2006, 00:49
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz