I just attempted to draw a rectangle with dimensions 3@3 corner: 9@3. Nothing gets drawn. The reason that nothing is drawn is that the width of the rectangle is 0. This makes sense for real numbers but for a pixelated screen or other display medium the dimensions of the rectangle should be 1 x 7 not 0 x 6!?. This is 7 pixels needed to draw, not 0.
The same issues occur for the height of the rectangles.
I would think that the way things work would cause all kinds of problems but since Rectangles are pretty basic, either I am wrong, or every bit of Squeak code using rectangles has adjusted accordingly.
Please clarify.
The coordinates refer to the imaginary lines between pixels. Thus, if you draw a rectangle from x=4 to x=5 its width is 1. This is so that if you draw multiple rectangles, they do not overlap (imagine drawing from 5 to 12 and from 12 to 19).
But I would expect these rectangles to overlap just like I would expect the intervals (3 to: 5) and (5 to: 7) to overlap; and they do (the intervals).
But of course we are doing computer graphics here, not mathematics. In the next couple of days I will write code to draw a line segment and see what happens. My guess is that if I draw a line from 3 @ 3 to 3 @ 5 only two pixels will be changed (analogous to how Rectangle works) and not three (my intuition prior to this conversation).
How do Java and other languages handle this?
Same. There's a nice illustration on this page: http://math.hws.edu/~bridgeman/courses/124/f13/doc/paint/paint.html
Regardless of my protestations on the right way to do this I must obviously conform to convention.
Thanks for the clarification.
Ralph Boland
beginners@lists.squeakfoundation.org