Merge pull request #204 from Tskken/master

Merge adding Rect.Intersects(Rect)bool function
This commit is contained in:
Michal Štrba 2019-11-06 00:39:51 +01:00 committed by GitHub
commit 853405f61c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 0 deletions

View File

@ -622,6 +622,17 @@ func (r Rect) Intersect(s Rect) Rect {
return t return t
} }
// Intersects returns whether or not the given Rect intersects at any point with this Rect.
//
// This function is overall about 5x faster than Intersect, so it is better
// to use if you have no need for the returned Rect from Intersect.
func (r Rect) Intersects(s Rect) bool {
return !(s.Max.X < r.Min.X ||
s.Min.X > r.Max.X ||
s.Max.Y < r.Min.Y ||
s.Min.Y > r.Max.Y)
}
// IntersectCircle returns a minimal required Vector, such that moving the circle by that vector would stop the Circle // IntersectCircle returns a minimal required Vector, such that moving the circle by that vector would stop the Circle
// and the Rect intersecting. This function returns a zero-vector if the Circle and Rect do not overlap, and if only // and the Rect intersecting. This function returns a zero-vector if the Circle and Rect do not overlap, and if only
// the perimeters touch. // the perimeters touch.

View File

@ -1555,3 +1555,29 @@ func TestLine_String(t *testing.T) {
}) })
} }
} }
func BenchmarkRect_Intersect(b *testing.B) {
root := pixel.R(10, 10, 50, 50)
inter := pixel.R(11, 11, 15, 15)
for i := 0; i < b.N; i++ {
if root.Intersect(inter) != pixel.ZR {
// do a thing
}
// do a thing
}
}
func BenchmarkRect_IsIntersect(b *testing.B) {
root := pixel.R(10, 10, 50, 50)
inter := pixel.R(11, 11, 15, 15)
for i := 0; i < b.N; i++ {
if root.Intersects(inter) {
// do a thing
}
// do a thing
}
}