Autor Beitrag
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: So 06.08.06 17:26 
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
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
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
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