AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Bug: IntersectRect liefert falsche Resultate
Thema durchsuchen
Ansicht
Themen-Optionen

Bug: IntersectRect liefert falsche Resultate

Ein Thema von Amateurprofi · begonnen am 29. Apr 2016 · letzter Beitrag vom 30. Apr 2016
Antwort Antwort
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.087 Beiträge
 
Delphi XE2 Professional
 
#1

AW: Bug: IntersectRect liefert falsche Resultate

  Alt 30. Apr 2016, 19:51
Hatte ich hier nicht schonmal geantwortet?

Also, das Problem ist, dass diese TRect-Funktionen eigentlich richtig funktionieren, aber die Zeichenfunktionen den Endpunkt nicht einbeziehen (was ich eher als Fehler erachte, aber das ist halt schon seit vielen Jahrzehnten so)

TCanvas.Rectangle, TCanvas.Line, TCanvas.PolyLine usw. sind im Entpunkt der Operation um ein Pixel verschoben, wie ihr schon bemerkt habt.
Aber dennoch arbeitet IntersectRect eigentlich richtig, nur halt nicht so, wie es die Zeichenfunktiopnen vorgeben, sondern nur auf den eigentlichen Wertebereich bezogen.
Nein, es ist genau umgekehrt.
Die Zeichenfunktionen arbeiten korrekt und IntersectRect und IntersectsWith arbeiten falsch.
Den Funktionen werden als Parameter TRect's übergeben und TRect ist nun einmal so definiert, dass Right und Bottom außerhalb der Fläche liegen.
Merke:
Eine Funktion arbeitet dann korrekt wenn sie das macht was der zugehörigen Dokumentation steht.
Ob dass dann auch den persönlichen Erwartungen entspricht, ist eine andere Sache.
Ein (zugegebenermaßen weit hergeholtes) Beispiel:

Delphi-Quellcode:
// Beschreibung: Mod gibt die Summe von A und B zurück
FUNCTION Mod(A,B:Integer):Integer;
begin
   Result:=A+B:
end;
Wenn nun Mod(15,3) = 18 ergibt, dann arbeitet sie korrekt, denn sie macht das, was in der Dokumentation steht.
Wenn der Anwender, der wahrscheinlich das Ergebnis 0 erwartet meint, sie arbeitet falsch, dann irrt der.
Und in der Beschreibung von zum Beispiel TRect.IntersectsWith steht
"returns true if any part of the rect covers R"
Im Fall dass die beiden Rechtecke aneinander Grenzen, machen spwohl IntersectRect und TRect.IntersectsWith nicht das, was in der Dokumentation steht, also arbeiten sie falsch und nicht "eigentlich richtig".

Allerdings ist die weitere Diskussion überflüssig, denn, wie Uwe schrieb, wurden die Funktionen in späteren Delphi Versionen korrigiert.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz