全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

java的点在多边形内的算法

发布时间:2023-06-28 14:34:00
发布人:yyy

  Java的点在多边形内的算法通常采用射线法(也称射线交叉算法)来实现。该算法基于以下原理:如果一个点在多边形内部,则从该点画一条水平向右的射线,与多边形相交的次数为奇数;如果在多边形外部,则相交次数为偶数;如果在多边形边界上,则相交次数不确定,有时为偶数,有时为奇数。

  具体实现步骤如下:

  定义一个射线,该射线与待判断点的y轴相交,并向右延伸到无穷远。

  遍历多边形的所有边,计算该边与射线的交点。

  如果交点在射线的右侧,则不计数;如果在射线的左侧,则计数。

  如果交点在射线上,则将相交次数+1,但不计入结果。

  如果相交次数为奇数,则点在多边形内部,否则在多边形外部。

  以下是Java实现的示例代码:

public static boolean isPointInPolygon(Point2D.Double point, List<Point2D.Double> polygon) {
int count = 0;
int size = polygon.size();
for (int i = 0; i < size; i++) {
Point2D.Double p1 = polygon.get(i);
Point2D.Double p2 = polygon.get((i + 1) % size);
if (p1.y == p2.y) {
continue;
}
if (point.y < Math.min(p1.y, p2.y)) {
continue;
}
if (point.y >= Math.max(p1.y, p2.y)) {
continue;
}
double x = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;
if (x > point.x) {
count++;
} else if (x == point.x) {
return true;
}
}
return count % 2 == 1;
}

   该方法接受一个待判断点和一个多边形的点集合,返回该点是否在多边形内部的布尔值。其中Point2D.Double表示二维平面上的点,x和y分别表示横纵坐标。

#java算法

相关文章

强化学习中,GAE和TD(lambda)的区别是什么?

强化学习中,GAE和TD(lambda)的区别是什么?

2023-10-15
什么是PCBA?

什么是PCBA?

2023-10-15
graph cut和graph cuts有什么区别?

graph cut和graph cuts有什么区别?

2023-10-15
轻应用和webapp两者的区别是什么?

轻应用和webapp两者的区别是什么?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取