Update adding new Rect.Intersects Method

This addes a new Rect.Intersects method which is around 5x faster then Rect.Intersect when used for basic collision checks.
This commit is contained in:
Tskken 2019-11-05 16:14:36 -07:00
parent bb82a87aaf
commit 706becb764
2 changed files with 37 additions and 0 deletions

View File

@ -622,6 +622,17 @@ func (r Rect) Intersect(s Rect) Rect {
return t
}
// Intersects returns whether or not the given Rect intersects at any point with this Rect.
//
// This function is overall about 5x faster then 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
// and the Rect intersecting. This function returns a zero-vector if the Circle and Rect do not overlap, and if only
// 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.IsIntersect(inter) {
// do a thing
}
// do a thing
}
}