GTA-Place
Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: So 06.08.06 17:26
Wenn ich 2 Rechtecke vom Typ TRect übereinander liegen habe, wie kann ich dann den überschneidenen Bereich berechnen?
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; |
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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var Rect1, Rect2, Rect3: TRect; begin Rect1 := Rect(10, 10, 100, 100); Rect2 := Rect(50, 50, 150, 150);
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
|