Zitat von
DGL-luke:
aber wenn es leer ist, heisst das doch nur, dass der erste teil false ergibt
Würde ich so nicht behaupten wollen:
Delphi-Quellcode:
function InterSectRect(var rect: TRect; const r1, r2: TRect): Boolean;
begin
rect.Left := Max(r1.Left, r2.Left);
rect.Top := Max(r1.Top, r2.Top);
rect.Right := Min(r1.Right, r2.Right );
rect.Bottom := Min(r1.Bottom, r2.Bottom);
Result := (rect.Left <= rect.Right) and (rect.Top <= rect.Bottom);
end;
Durch deinen Einsatz von Abs() ignorierst du die Bedingung für ein leeres Rechteck.
Zitat von
DGL-luke:
das muss sogar mit aufgenommen werden. denn wenn das rect leer ist und IsValidSpace true, ... will ich ja was machen.
Okay, dann so:
Delphi-Quellcode:
begin
// ...
if IsRectEmpty(ir)
then intersectspace := 0
else intersectspace := abs((ir.Right - ir.Left) * (ir.Bottom - ir.Top));
if ((intersectspace >= puffer) xor IsValidSpace) then
begin
machwas;
end;
// ...
end;
marabu