Java 判断点是否在多边形内 (不包含边界)
这段代码实现了一个判断一个点是否在一个多边形内的功能。它接受两个参数,一个是当前点 (Pt 类型),另一个是多边形顶点列表 (List
首先,代码定义了一个 Path2D.Double 类型的 path 对象,用于表示多边形的轮廓。然后,它取出多边形顶点列表中的第一个点作为起始点,并调用 path 对象的 moveTo 方法将起始点设为当前的绘制点。
接下来,代码使用一个 for 循环遍历多边形顶点列表中的所有点,将它们依次连接起来,形成多边形的轮廓。具体来说,每次循环会取出下一个点 next,然后调用 path 对象的 lineTo 方法将当前绘制点与 next 点连接起来。
最后,代码再次调用 path 对象的 lineTo 方法,将最后一个点与第一个点连接起来,形成一个封闭的多边形。然后,它调用 path 对象的闭合方法 closePath,将多边形的轮廓封闭起来。
最后,代码调用 path 对象的 contains 方法,检查当前点是否在多边形内。如果在多边形内,返回 true,否则返回 false。
/**
* 点是否在多边形内(点在线上不算在多边形内)
* @param pt 当前点
* @param pts 多边形顶点列表
* @return 是否在多边形内
*/
public static boolean isPtInPoly(Pt pt, List<Pt> pts){
Path2D.Double path = new Path2D.Double();
Pt first = pts.get(0);
path.moveTo(first.x,first.y);
for (int i = 1; i < pts.size(); i++) {
Pt next = pts.get(i);
path.lineTo(next.x,next.y);
}
path.lineTo(first.x,first.y);
path.closePath();
return path.contains(pt.x,pt.y);
}
代码说明:
- 该代码使用了 Java 中的 Path2D.Double 类来表示多边形。
- 使用 moveTo 和 lineTo 方法来构建多边形的轮廓。
- 使用 contains 方法来判断点是否在多边形内。
- 该代码判断点是否在多边形内部,不包含边界上的点。
使用示例:
// 创建多边形顶点列表
List<Pt> pts = new ArrayList<>();
// 添加多边形顶点
// ...
// 创建一个点
Pt pt = new Pt(x, y);
// 判断点是否在多边形内
boolean isInside = isPtInPoly(pt, pts);
// 打印结果
System.out.println("点是否在多边形内: " + isInside);
注意事项:
- Pt 类需要定义点的坐标 (x, y)。
- 该代码仅适用于简单的多边形,对于自相交的多边形可能无法正常工作。
- 该代码判断点是否在多边形内部,不包含边界上的点。
- 该代码使用了 Java 中的 Path2D.Double 类,需要导入 java.awt.geom 包。
原文地址: https://www.cveoy.top/t/topic/ot0F 著作权归作者所有。请勿转载和采集!