本文主要是介绍【C/C++学习笔记】判断一个点是否在多边形内部的例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、多边形电子围栏
- 二、实现代码
一、多边形电子围栏
在绘制电子围栏时,会有各种各样的围栏形状,如何判断GPS的点在不在多边形内部呢?
图示如下:
二、实现代码
/* 原理: 将测试点的Y坐标与多边形的每一个点进行比较,
** 会得到测试点所在的行与多边形边的所有交点。
** 如果测试点的两边点的个数都是奇数个,
** 则该测试点在多边形内,否则在多边形外。 */#include <stdio.h>/* 函数功能: 判断点(x, y)是否在有ploy_sides个顶点的多边形内 */
/* 参数: poly_sides 测试多边形的顶点数
** poly_x 测试多边形的各个顶点的X轴坐标
** poly_y 测试多边形的各个顶点的Y轴坐标
** x 测试点的X轴坐标
** Y 测试点的Y轴坐标 */
/* 返回值: 返回0 表示不在多边形内部,返回1 表示在多边形内部 */
/* 说明: 在多边形各边上的点默认不在多边形内部 */
int inOrNot(int poly_sides, float *poly_X, float *poly_Y, float x, float y)
{int i, j;j = poly_sides-1;int res = 0;for (i = 0; i<poly_sides; i++) {if((poly_Y[i]<y && poly_Y[j]>=y || poly_Y[j]<y && poly_Y[i]>=y) && (poly_X[i]<=x || poly_X[j]<=x)){res ^= ((poly_X[i] + (y-poly_Y[i])/(poly_Y[j]-poly_Y[i])*(poly_X[j]-poly_X[i])) < x);}j=i;}return res;
}int main(void)
{int poly_sides = 5; // 多边形顶点数float poly_X[5] = {1, 1, 3, 4, 3}; // 多边形各顶点的X轴坐标float poly_Y[5] = {1, 2, 3, 2, 1}; // 多边形各顶点的Y轴坐标float x = 399; // 测试点的X轴坐标float y = 2; // 测试点的Y轴坐标int ret;ret = inOrNot(poly_sides, poly_X, poly_Y, x, y);if(1 == ret){printf("the point (%f, %f), in the poly\n", x, y);}else{printf("the point (%f, %f), not in the poly\n", x, y);}return 0;
}
—— 2018-11-29 ——
这篇关于【C/C++学习笔记】判断一个点是否在多边形内部的例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!