【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 ——

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 高德地图web多边形电子围栏demo是一种实时监测车辆位置的应用,主要利用高德地图提供的API服务,将车辆的位置信息与事先设定的围栏进行比对,判断车辆是否进入或离开了指定区域。 该应用的工作原理是,将围栏划分为多个多边形,将每个多边形坐标点保存在后台数据库中,并在前端展示出来。每当有车辆信息上传到服务器时,应用会通过高德地图api计算该车辆当前位置是否在围栏内。如果车辆进入或离开了围栏,应用会实时向后台数据库发送通知,并通知管理员进行处理。 多边形电子围栏主要应用于车辆监控、运输监管、领域物流等领域,在这些领域中,电子围栏是确保车辆及相关人员的安全、有效管理运输和协调资源的重要工具。 总之,高德地图web多边形电子围栏demo是一种功能强大的应用程序,其依靠高德地图提供的先进技术和服务能够帮助用户实现对车辆的实时监测和可视化管理,进一步提高车辆、人员的安全性和运行效率。 ### 回答2: 高德地图web多边形电子围栏demo是一种应用程序,用于在地图上创建多边形电子围栏,以便对车辆或其他移动物体进行位置跟踪和管理。 用户可以在高德地图web多边形电子围栏demo中设置任意多个多边形区域,为这些区域指定特定的名称和ID,并将它们与一组车辆或其他物体绑定。此外,用户还可以在围栏内设置不同的告警级别,以便及时发现和管理违规行为。 在使用高德地图web多边形电子围栏demo的过程中,用户可以通过一个简单的API接口来实现围栏的添加、删除、编辑和查询等操作。同时,该应用程序还提供了一系列实用的工具和功能,如围栏告警管理、历史轨迹回放、路线规划等,以帮助用户轻松管理不同车辆的行驶情况。 总之,高德地图web多边形电子围栏demo为用户提供了一种简单、易用和高效的围栏管理工具,可以帮助车队或物流公司实现更加安全、便捷和精细化的车辆管理。 ### 回答3: 高德地图web多边形电子围栏demo是一种应用高德地图API的电子围栏示例,它可以很好地帮助使用者熟悉地图API以及电子围栏的相关知识。 该demo主要功能是在地图上添加多边形电子围栏,使用者可以根据实际需求自定义多边形的顶点及围栏的名称。在围栏添加完成后,可以通过点击围栏查看详细信息,如围栏名称、围栏类型、围栏区域等。同时,该demo还提供了围栏的编辑和删除功能,使用者可以对已添加的围栏进行编辑和删除操作。 除此之外,该demo还提供了多种围栏展示方式,如显示围栏区域、添加报警提示、显示报警信息等。这些功能可以帮助使用者在线对围栏进行监控,提高工作效率和安全性。 总体来说,高德地图web多边形电子围栏demo是一款功能实用、易上手的电子围栏应用示例,对于需要使用电子围栏的企业和个人,都是一个非常实用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值