这段代码实现了一个判断一个点是否在一个多边形内的功能。它接受两个参数,一个是当前点 (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 包。
Java 判断点是否在多边形内 (不包含边界)

原文地址: https://www.cveoy.top/t/topic/ot0F 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录