[squeak-dev] Rectangle >> intersects: "degenerate case" -- *wrong*
behavior??
Jim Rosenberg
jr at amanue.com
Tue Jan 15 00:16:37 UTC 2013
[Apologies in advance if this has been discussed up here before ...]
Grumble grumble grumble grumble. Grrr!
Consider the case of rectangle a and rectangle b where a happens to be
"degenerate" in the sense that it has 0 area -- let's say that a origin y =
a corner y -- i.e. if you draw a it looks like a horizontal line. And let's
say that if you draw these two rectangles, a "goes inside the area of" b.
Do they intersect? I'd sure say yes. Squeak 3.8 says yes. Squeak 4.3 says
no. *BUT* a intersect: b in Squeak 4.3 *does return* the part of a that's
inside b.
Looking at the code for Rectangle >> intersect: in 4.3, it sure looks to me
like this behavior was introduced rather explicitly and deliberately.
But is it correct? I'd say no. I'd say no-brainer no. I guess maybe
somebody is thinking that Rectangle >> intersects: should produce an answer
that agrees with the question: does a possible intersection have area
greater than 0? Well, sorry, but I don't think that's the right question.
The right question is: do the two rectangles have points in common?
I have code that was very mysteriously broken by this; I've created a
degenerate rectangle out of a line *on purpose* just to be able to get the
intersection of a line and a rectangle. I don't see any reason why I
shouldn't be able to do this. Set theory says I can do it. Geometry says I
can do it. Squeak 3.8 says I can do it.
So: whichever committer out there decided that a degenerate rectangle can't
intersect, what exactly will I break if I put back the [correct, ahem ...]
3.8 behavior of Rectangle >> intersect: in 4.3?
I say: put the old behavior back. It wasn't wrong. The new behavior is
wrong.
-Thanks, Jim
More information about the Squeak-dev
mailing list
|