From 2cce50832d2200d47aa046479ee531ce3406cff0 Mon Sep 17 00:00:00 2001
From: Ben Cragg <bcvery1@gmail.com>
Date: Tue, 29 Jan 2019 12:31:59 +0000
Subject: [PATCH] fixed intersect function

---
 geometry.go      |  3 ++-
 geometry_test.go | 10 ++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/geometry.go b/geometry.go
index 70404bc..ab7573e 100644
--- a/geometry.go
+++ b/geometry.go
@@ -483,7 +483,8 @@ func (c Circle) IntersectsRect(r Rect) bool {
 		}.Contains(c.Center)
 	}
 	// The center is in the diagonal quadrants
-	return c.Center.To(r.Min).Len() <= c.Radius || c.Center.To(r.Max).Len() <= c.Radius
+	return c.Center.To(r.Min).Len() <= c.Radius || c.Center.To(r.Max).Len() <= c.Radius ||
+		c.Center.To(V(r.Min.X, r.Max.Y)).Len() <= c.Radius || c.Center.To(V(r.Max.X, r.Min.Y)).Len() <= c.Radius
 }
 
 // Matrix is a 2x3 affine matrix that can be used for all kinds of spatial transforms, such
diff --git a/geometry_test.go b/geometry_test.go
index 3738b86..0ea1f1c 100644
--- a/geometry_test.go
+++ b/geometry_test.go
@@ -490,9 +490,15 @@ func TestRect_IntersectsCircle(t *testing.T) {
 			want:   true,
 		},
 		{
-			name:   "Rect.IntersectsCircle(): circle overlaps one corner",
+			name:   "Rect.IntersectsCircle(): circle overlaps bottom-left corner",
 			fields: fields{Min: pixel.ZV, Max: pixel.V(10, 10)},
-			args:   args{c: pixel.C(1, pixel.ZV)},
+			args:   args{c: pixel.C(1, pixel.V(-.5, -.5))},
+			want:   true,
+		},
+		{
+			name:   "Rect.IntersectsCircle(): circle overlaps top-left corner",
+			fields: fields{Min: pixel.ZV, Max: pixel.V(10, 10)},
+			args:   args{c: pixel.C(1, pixel.V(-.5, 10.5))},
 			want:   true,
 		},
 		{
-- 
GitLab