废话不多说,直接进入正题:
判断某点是否在特定区域内,使用 java.awt.geom.GeneralPath 类中的 contains 方法;
该类常用的构造方法:
GeneralPath ( ) 构造一个新的单精度空 GeneralPath 对象
GeneralPath(Shape s) 根据任意 Shape 对象构造一个新 GeneralPath 对象
关于 Shape 接口 想了解的自行查找API,我这里使用 Point2D.Double 实现类来绘制多边形。
具体的代码,这是绘制多边形的:
private boolean contains(Point2D.Double point,
List<Point2D.Double> polygon) {
if (null == polygon || polygon.isEmpty()) { // 不存在区域坐标点,无法绘制区域
return false;
} else if (polygon.size() < 3) { // 区域坐标点数小于3, 无法绘制区域
return false;
} else {
GeneralPath p = new GeneralPath();
// 获取坐标区域的第一个点
Point2D.Double first = polygon.get(0);
// 绘图 GeneralPath 路径的开始
p.moveTo(first.x, first.y);
// 第一个点已经绘制完成,remove掉
polygon.remove(0);
for (Point2D.Double d : polygon) {
// 按坐标连线
p.lineTo(d.x, d.y);
}
// 将区域闭合
p.lineTo(first.x, first.y);
// 绘图结束
p.closePath();
// 判断 该点是否在绘制的图形内
return p.contains(point);
}
}
需要注意的是 传入的 list 这个点集必须排好序,如果这个点集是乱序的话,那么绘制出来的多边形也是乱的! 切记!
/***********************分***割***线**