概述
判断一个点是否在多边形内,射线法,电子围栏
/**
* 根据某点坐标判断该坐标是否在某区域坐标范围内
* @param px 目标点x坐标
* @param py 目标点y坐标
* @param polygonXA 目标范围xy坐标集合
* @return
*/
public boolean rayCasting(double px, double py, String polygon) {
boolean flag = false;
String[] points = polygon.split(",");
for (int i = 0, j = points.length - 2; i < points.length - 1; j = i, i = i + 2) {
double sx = Double.parseDouble(points[j]);// 从倒数第二依次读取;
double sy = Double.parseDouble(points[j + 1]);// 从倒第一依次读取;
double tx = Double.parseDouble(points[i]);// 从第一个依次读取;
double ty = Double.parseDouble(points[i + 1]);// 从第二个依次读取;
// 点与多边形顶点重合
if ((sx == px && sy == py) || (tx == px && ty == py)) {
return true;
}
// 判断线段两端点是否在射线两侧,射线为y轴;
if ((sy < py && ty >= py) || (sy >= py && ty < py)) {
// 线段上与射线 Y 坐标相同的点的 X 坐标
double x = sx + (py - sy) * ((tx - sx) / (ty - sy));
// 点在多边形的边上
if (x == px) {
return true;
}
// 射线穿过多边形的边界
if (x > px) {
flag = !flag;
}
}
}
// 射线穿过多边形边界的次数为奇数时点在多边形内
return flag;
}
最后
以上就是懦弱纸飞机为你收集整理的判断一个点是否在多边形内,射线法,电子围栏的全部内容,希望文章能够帮你解决判断一个点是否在多边形内,射线法,电子围栏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复