this seems to work
This commit is contained in:
parent
5c313e8518
commit
a4d2dd9344
1 changed files with 7 additions and 20 deletions
|
@ -83,33 +83,20 @@ func polygonContains(polygon []image.Point, p image.Point) bool {
|
||||||
|
|
||||||
// polygonRectOverlap reports if a polygon overlaps a rectangle.
|
// polygonRectOverlap reports if a polygon overlaps a rectangle.
|
||||||
func polygonRectOverlap(polygon []image.Point, rect image.Rectangle) bool {
|
func polygonRectOverlap(polygon []image.Point, rect image.Rectangle) bool {
|
||||||
// There's a good chance a vertex from one thing is inside the other...
|
if polygon[0].In(rect) {
|
||||||
|
return true
|
||||||
// Check if any vertex of the polygon is inside the rect.
|
|
||||||
for _, p := range polygon {
|
|
||||||
if p.In(rect) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reduced Max (to the inclusive bound).
|
|
||||||
rmax := rect.Max.Sub(image.Pt(1, 1))
|
|
||||||
|
|
||||||
// Check if any vertex of the rect is inside the polygon.
|
// Check if any vertex of the rect is inside the polygon.
|
||||||
if polygonContains(polygon, rect.Min) {
|
if polygonContains(polygon, rect.Min) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
if polygonContains(polygon, rmax) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if polygonContains(polygon, image.Pt(rect.Min.X, rmax.Y)) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if polygonContains(polygon, image.Pt(rmax.X, rect.Min.Y)) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only remaining cases involve line intersection between the rect and poly.
|
// Reduced Max (to the inclusive bound).
|
||||||
|
rmax := rect.Max.Sub(image.Pt(1, 1))
|
||||||
|
|
||||||
|
// Only remaining cases involve line intersection between the rect and poly
|
||||||
|
// having eliminated the possibility that one is entirely within another.
|
||||||
|
|
||||||
// Since rect is an axis-aligned rectangle, we only need vertical and
|
// Since rect is an axis-aligned rectangle, we only need vertical and
|
||||||
// horizontal line intersection tests.
|
// horizontal line intersection tests.
|
||||||
|
|
Loading…
Reference in a new issue