Auch verstehe ich nicht ganz, warum ein definiertes Rect.Create(Point(1,1),5,5) nachher in Rect.Right = 6 enthält.
Im Moment bezeichnet Rect.Right nicht das letzte Pixel eines Rects sondern das rechts daneben.
Wenn man von 1 an 5 Pixel zählt liegt das letzte aber bei 5. Von 1 bis 5 sind also 5 Pixel belegt, die Breite ist 5 und das letzte (rechte) Pixel liegt bei 5 (nicht bei 6).
Irgendwie finde ich das unlogisch.
Es hört sich unlogisch an, liegt aber daran, dass Punkte keine Flächen sind und eine Fläche keine Punkte
(Tolle Erklärung ... ok, ich versuche es mal besser)
Diese Fläche wird beschrieben durch die Punkte (
nicht mit Pixeln verwechseln) [P(0,0),P(2,2)] => Die Fläche fängt bei P(0,0) and und hört bei P(2,2) auf.
Code:
0 1 2
0 +---+---+
| * | * |
1 +---+---+
| * | * |
2 +---+---+
Ein
Pixel ist hingegen eben auch eine
Fläche und wenn man einen Pixel zeichnet, dann muss man die Zeichenfläche etwas anders organisiert betrachten (da sich ja auch der Kontext/die Betrachtungsweise geändert hat)
Code:
0 1
+---+---+
0 | * | |
+---+---+
1 | | |
+---+---+
Ein Pixel Px(0,0) ist gleichzusetzen mit einer
Fläche [P(0,0),P(1,1)] (eine Fläche mit der Höhe 1 und Breite 1)
Diese Unterschiede werden aber sprachlich nicht korrekt hervorgehoben.
Delphi-Quellcode:
type
TRect = record
function Contains(const Pt: TPoint): Boolean;
end;
bezieht sich nicht auf die Punkte, sondern auf die Pixel!
Zitat:
Ein Punkt, der sich auf der oberen (Top) oder linken (Left) Seite des Rechtecks befindet, wird als im Rechteck befindender Punkt betrachtet, während ein Punkt, der sich auf der rechten (Right) oder unteren (Bottom) Seite befindet, als außerhalb des Rechtecks befindender Punkt betrachtet wird.