Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
... den überschneidenden Bereich zweier Rechtecke berechnen?
spacer
Autor Nachricht
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur

Beiträge: 5245
Erhaltene Danke: 1
Dabei seit: 24.03.2004
Wohnort: Weingarten

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 06.08.06 17:26  Antworten mit Zitat Beitrag melden
Wenn ich 2 Rechtecke vom Typ TRect übereinander liegen habe, wie kann ich dann den überschneidenen Bereich berechnen?

ausblenden Wenn man sicher ist, dass sich 2 Rechtecke überlagen markieren
1:
2:
3:
4:
5:
6:
7:
function ColRect(A, B: TRect): TRect;  
begin  
  Result.Left   := max(min(A.Right, B.Left), min(A.Left, B.Right));  
  Result.Right  := min(max(A.Right, B.Left), max(A.Left, B.Right));  
  Result.Top    := max(min(A.Bottom, B.Top), min(A.Top, B.Bottom));  
  Result.Bottom := min(max(A.Bottom, B.Top), max(A.Top, B.Bottom));  
end;


ausblenden Wenn man nicht sicher ist, ob sich 2 Rechtecke überlagern markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function ColRect(A, B: TRect): TRect;
var
  IsCol: Boolean;
begin
  IsCol := (A.Left <= B.Right) AND (A.Right >= B.Left) AND (A.Top <= B.Bottom) AND (A.Bottom >= B.Top);

  if IsCol then
  begin
    Result.Left   := max(min(A.Right, B.Left), min(A.Left, B.Right));
    Result.Right  := min(max(A.Right, B.Left), max(A.Left, B.Right));
    Result.Top    := max(min(A.Bottom, B.Top), min(A.Top, B.Bottom));
    Result.Bottom := min(max(A.Bottom, B.Top), max(A.Top, B.Bottom));
  end;
end;


Aufzurufen mit:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  Rect1, Rect2, Rect3: TRect;
begin
  Rect1 := Rect(1010100100);
  Rect2 := Rect(5050150150);

  Rect3 := ColRect(Rect1, Rect2);

  ShowMessage('Der überschneidende Bereich ist ' + IntToStr(Rect3.Right - Rect3.Left) + ' Pixel breit.');
  ShowMessage('Der überschneidende Bereich ist ' + IntToStr(Rect3.Bottom - Rect3.Top) + ' Pixel hoch.');
end;


Ich hoffe, dass es das noch nicht gab. Ist mein erster FAQ-Eintrag :-).

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)


Zuletzt bearbeitet von GTA-Place am Do 14.09.06 20:48, insgesamt 1-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home