On Thu, Sep 29, 2011 at 5:50 PM, Greg Ewing <[email protected]>wrote:
> Christopher Night wrote: > > I actually think the correct behavior is to truncate. This makes sense if >> you consider the pixel "at" (0,0) to actually occupy a 1x1 rectangle, >> extending from (0,0) to (1,1). So the point (0.7, 0.7) should actually be >> considered to be within the pixel at (0,0). >> > > If your intention is to draw a 1x1 rectangle at some location > on the screen, the correct approach would be to calculate the > transformed coordinates of all four sides of the rectangle, > round them to ints, and then fill the resulting rect. > Okay, thanks for the response. I understand that you're saying that's correct, but I don't understand why. If I have a 100x100 pixel window, and I want to put a dot at a position (x,x), it seems to me like the dot should appear in the window if 0 <= x < 100. You're saying it should appear in the window if -0.5 <= x < 99.5. So if I request to put a point at (-0.4, -0.4), it will appear in the window, but if I put one at (99.6, 99.6), it won't. I disagree that this is the correct behavior. Intuitively, the point (99.6, 99.6) should be within a 100x100 canvas. I realize that it's a matter of preference, and either way would be logically consistent, so it's just a matter of which is more intuitive and comfortable. > In my experience, rounding is almost always the right thing > to do, and if it seems not to be, then you're not thinking > about the problem the right way. > Well, that's certainly not true. Rounding is often the correct way to get from a float to an int, but truncation is correct at times too. I can provide examples if you want. But even so, I think they should make this decision based on what's the right answer for this problem, not what's the right answer in a general sense. -Christopher
