diff --git a/src/image/geom.go b/src/image/geom.go index e1cd4dc1e3e..ed7dde2c84d 100644 --- a/src/image/geom.go +++ b/src/image/geom.go @@ -161,7 +161,11 @@ func (r Rectangle) Intersect(s Rectangle) Rectangle { if r.Max.Y > s.Max.Y { r.Max.Y = s.Max.Y } - if r.Min.X > r.Max.X || r.Min.Y > r.Max.Y { + // Letting r0 and s0 be the values of r and s at the time that the method + // is called, this next line is equivalent to: + // + // if max(r0.Min.X, s0.Min.X) >= min(r0.Max.X, s0.Max.X) || likewiseForY { etc } + if r.Empty() { return ZR } return r diff --git a/src/image/geom_test.go b/src/image/geom_test.go index 6e9c6a13c2c..9fede027218 100644 --- a/src/image/geom_test.go +++ b/src/image/geom_test.go @@ -28,6 +28,7 @@ func TestRectangle(t *testing.T) { rects := []Rectangle{ Rect(0, 0, 10, 10), + Rect(10, 0, 20, 10), Rect(1, 2, 3, 4), Rect(4, 6, 10, 10), Rect(2, 3, 12, 5), @@ -62,9 +63,9 @@ func TestRectangle(t *testing.T) { if err := in(a, s); err != nil { t.Errorf("Intersect: r=%s, s=%s, a=%s, a not in s: %v", r, s, a, err) } - if a.Empty() == r.Overlaps(s) { - t.Errorf("Intersect: r=%s, s=%s, a=%s: empty=%t same as overlaps=%t", - r, s, a, a.Empty(), r.Overlaps(s)) + if isZero, overlaps := a == (Rectangle{}), r.Overlaps(s); isZero == overlaps { + t.Errorf("Intersect: r=%s, s=%s, a=%s: isZero=%t same as overlaps=%t", + r, s, a, isZero, overlaps) } largerThanA := [4]Rectangle{a, a, a, a} largerThanA[0].Min.X--