
Go 标准库 image 包提供了 image.Point.In() 方法,可直接、简洁地判断一个点是否位于给定 image.Rectangle 内部(左闭右开区间),无需手动比较坐标边界。
go 标准库 `image` 包提供了 `image.point.in()` 方法,可直接、简洁地判断一个点是否位于给定 `image.rectangle` 内部(左闭右开区间),无需手动比较坐标边界。
在 Go 的图像处理中,image.Point 和 image.Rectangle 是基础几何类型,常用于像素坐标计算与区域裁剪。虽然 image.Rectangle 本身未定义 Contains() 方法,但 image.Point 类型实现了 In(r image.Rectangle) bool 方法——这正是官方推荐的、语义清晰且零开销的解决方案。
该方法严格遵循 Go 图像坐标系约定:矩形范围为 左闭右开(即 r.Min.X ≤ p.X < r.Max.X 且 r.Min.Y ≤ p.Y < r.Max.Y),与 image.Rect() 构造行为及绘图操作完全一致,避免了手动实现时易出错的边界逻辑。
✅ 正确用法示例:
package main
import (
"fmt"
"image"
)
func main() {
p := image.Point{X: 10, Y: 20}
r := image.Rect(0, 0, 100, 50) // [0,100) × [0,50)
if p.In(r) {
fmt.Println("点在矩形内")
} else {
fmt.Println("点在矩形外")
}
}⚠️ 注意事项:
- p.In(r) 要求 r 是合法矩形(即 r.Min.X ≤ r.Max.X 且 r.Min.Y ≤ r.Max.Y);若 r 为空矩形(如 image.Rect(5,5,3,3)),In() 恒返回 false,符合预期;
- 该方法不支持浮点坐标——image.Point 是整数类型,如需浮点精度检测,请使用 image.Rectangle 配合自定义逻辑或第三方几何库(如 gonum/geom);
- 性能上,In() 是内联函数,编译后等价于手动边界判断,无额外开销,但可读性与可维护性显著提升。
总结:与其重复书写冗长的四元比较表达式,不如直接调用 p.In(r) —— 它是标准库提供的、经过充分测试的权威接口,兼具简洁性、正确性与可移植性。在图像坐标处理、UI 点击检测、碰撞判定等场景中,应作为首选方案。










