AGB  ·  Datenschutz  ·  Impressum  







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

Überschneiden zweier Rechtecke

Ein Thema von TheAn00bis · begonnen am 19. Jun 2006 · letzter Beitrag vom 19. Jun 2006
 
TheAn00bis

Registriert seit: 7. Jun 2004
386 Beiträge
 
#1

Überschneiden zweier Rechtecke

  Alt 19. Jun 2006, 12:58
Hey,

P1x und P1y bzw. P2x und P2y seien jeweils die Koordinaten der unteren linken Ecke, ich gehe von einem normalen Koordinatensystem aus, bei welchem unten links 0 ist und nach rechts und oben die Koordinaten größer werden.

Ich versuche jetzt seit einiger Zeit festzustellen, ob sich diese Rechtecke überschneiden, doch das will mir nicht gelingen. Es gibt dafür bereits die Windows Funktion RectIntersect, doch ich möchte nicht nur Ganzzahlen verwenden können, außerdem würde ich als Parameter lieber P1x, P1y, P2x, P2y, P1sizeX, P1sizeY, P2sizeX und P2sizeY übergeben, da mein gesamtes Programm bereits darauf ausgerichtet ist.

Alle Funktionen, die ich bis jetzt geschrieben haben funktionieren nicht und geben selbst bei zwei identischen Rechtecken "false" zurück:

Delphi-Quellcode:
function RectIntersectFloat(P1x, P1y, P1sizeX, P1sizeY, P2x, P2y, P2sizeX, P2sizeY: Extended):Boolean;
begin
  result := true;
  if (P1x >= P2x+P2sizeX) or
     (P1y+P1sizeY >= P2y) or
     (P2x >= P1x+P1sizeX) or
     (P2y+P2sizeY >= P1y) then result:=false;
end;
Außerdem habe ich hier im Forum folgende Funktion vom ehemaligen Benutzer tommie-lie gefunden:

Delphi-Quellcode:
function RectIntersect(A, B: TRect; Offset: Integer): Boolean;
begin
  result := not((A.Right + Offset <= B.Left) or
                (A.Bottom + Offset <= B.Top) or
                (A.Top - Offset >= B.Bottom) or
                (A.Left - Offset >= B.Right));
end;
Diese habe ich einfach so umgewandelt, dass sie meinen Parametern entspricht und das Offset weggelassen (da ich dies nicht brauche), aber auch hier wird selbst bei zwei identischen Rechtecken "false" zurückgegeben:

Delphi-Quellcode:
function RectIntersectFloat(P1x, P1y, P1sizeX, P1sizeY, P2x, P2y, P2sizeX, P2sizeY: Extended):Boolean;
begin
  result := not((P1x + P1sizeX <= P2x) or
                (P1y <= P2y+P2sizeY) or
                (P1Y + P1sizeY >= P2y) or
                (P1x >= P2x+P2sizeX));
end;
Was mache ich falsch? Oder viel wichtiger: Wie wäre es richtig?
Daran, dass ich Mathematik-LK habe darf ich gerade gar nicht denken.
  Mit Zitat antworten Zitat
 


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 00:27 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-2025 by Thomas Breitkreuz