Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 

Re: "Echte" Sichtbarkeitsprüfung

  Alt 16. Apr 2006, 20:50
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
  Mit Zitat antworten Zitat