首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

判断点在多边形算法的C++实现

算法思路 判断平面点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。...if ((r >= 0) && (r = 0) && (s <= 1)) { flag = true; } } return flag; } //判断点在多边形...将起始点放入尾部,方便遍历每一条边 // if (Point_In_Polygon_2D(407.98, 579.43, POL)) { cout << "点(407.98, 579.43)在多边形..., 482.07, POL)) { cout << "点(678.92, 482.07)在多边形" << endl; } else { cout << "点(678.92, 482.07...改进空间 很多情况下在使用该算法之前,需要一个快速检测的功能:当点不在多边形的外包矩形的时候,那么点一定不在多边形

5.5K30

一种快速判断点在多边形的算法

由于业务需要, 我总结了一种快速判断点在多边形的算法。 先说思路: 如图: 如果点在多边形内部,射线第一次穿越边界一定是穿出多边形。 如果点在多边形外部,射线第一次穿越边界一定是进入多边形。...我们可以归纳出: 当射线穿越多边形边界的次数为偶数时,所有第偶数次(包括最后一次)穿越都是穿出,因此所有第奇数次(包括第一次)穿越为穿入,由此可推断点在多边形外部。...当射线穿越多边形边界的次数为奇数时,所有第奇数次(包括第一次和最后一次)穿越都是穿出,由此可推断点在多边形内部。 实现关键点 1....点在多边形的边上 前面我们讲到,射线法的主要思路就是计算射线穿越多边形边界的次数。那么对于点在多边形的边上这种特殊情况,射线出发的这一次,是否应该算作穿越呢?...&& y >= y2) { // 斜率 k := (x2 - x1) / (y2 - y1) // 相交点的 x 坐标 _x := x1 + k*(y-y1) // 点在多边形的边上

92710
您找到你想要的搜索结果了吗?
是的
没有找到

Android如何判断一个点在不在多边形区域

有人问我,怎么判断一个点是不是在多边形,本来想着把这个多边形分成一个又一个三角形,如图, ?...,就说明这个点在三角形中,如图。...double BCp = triAngleArea(B, C, P); if ((int) ABC == (int) (ABp + ACp + BCp)) {// 若面积之和等于原三角形面积,证明点在三角形...这个问题一出来,我立刻蒙圈啦,这个应该怎么做,最后在网上找到了解决办法,那就是沿着这个点做平行线,如果这个点单侧和多边形相交的点为奇数,就说明这个点在这个多边形中,如图: ?...代码如下: /** * 功能:判断点是否在多边形 方法:求解通过该点的水平线与多边形各边的交点 结论:单边交点为奇数,成立!

88330

Mapinfo高阶-判断点是否位于多边形

主流算法: (1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。...如果测试点的两边点的个数都是奇数个则该测试点在多边形,否则在多边形外。在这个例子中测试点的左边有5个交点,右边有三个交点,它们都是奇数,所以点在多边形。 ?...一个偶然的机会想起了之前圈网格站点的方法,感觉可以试试,便按照这个思路搞了一下,结果成功了。...至此,便得到了点和多边形汇聚后的表,如果该点位于多边形,则会出现一条记录,否则,不出现。 其实,我脑海里还有一个算法,只是无法用代码实现,如果你可以用代码实现,欢迎告诉我。...另外的算法: 1、将点设置为红色; 2、将多边形设置为黑色; 3、查询点的颜色,黑色则说明位于多边形,红色则说明位于多边形外。

1.7K20

平面几何:求接或外切于圆的正多边形

求和圆接的正多边形 方法参数有: center:圆心位置; start:正多边形上的一个点,和 center 的距离即圆的半径; count:多边形边数。 返回值为多边形上连续的点数组。...或者用矩阵的方式表达,可读性更好,但通常需要引入一个矩阵库,下面是 pixi.js 的写法: const rotate = (p: Point, center: Point, rad: number)...const getExternalTanRegularPolygon = ( center: Point, start: Point, count: number, ) => { // 转换为多边形...start.y - center.y) * t, }; return getInternalTanRegularPolygon(center, start, count); }; 效果演示 结尾 接正多边形的思路为...外切正多边形,可以转换为求接,只需要用三角函数和线性插值计算等价的接下的起点。 我是前端西瓜哥,关注我,学习更多平面几何知识。

8010

空间中判断点在三角形算法(方程法)

概述 三维空间中判断点在三角形内外的算法与平面中有所不同,《平面中判断点在三角形算法(同向法)》中提到的算法在三维空间中已经无法生效,也很难利用上。...对于三个顶点为V0,V1,V2组成的空间三角形,对于三角形的任一点P,有如下参数方程: \[\vec{P} = (1 - u - v) \vec{V_0} + u \vec{V_1} + v \vec...求解这个方程组,如果解是矛盾的,说明点不在空间三角形;否则,点可能在三角形上。 2.2....如果成立,且满足三角形内部点方程的条件(u >= 0, v >= 0, u + v <= 1),说明点在空间三角形上,反之,点在空间三角形外。 3....参考 《平面中判断点在三角形算法(同向法)》 《空间射线与三角形相交算法的两种实现》 详细代码

1.5K20

平面中判断点在三角形算法(重心法)

概述 在文章《判断点是否在三角形》中还提到了一种判断点在三角形内外的算法——重心法。...这种算法同样用到了三角形的空间向量方程,但是值得注意的是,这种算法却只能判断平面中点在三角形的内外关系(已知空间向量方程,是可以判断三维空间关系的:空间中判断点在三角形算法(方程法))。 2....原理 重心法的推导过程与空间中判断点在三角形算法(方程法))的推导过程比较相似。...总结 本质上,这个算法与空间中判断点在三角形算法(方程法)是同一种算法的不同推导,都是通过空间三角形中点的向量方程来求解的,但是是采用了不同的解法。...参考 判断点是否在三角形 空间中判断点在三角形算法(方程法)) 详细代码

1.7K50

判断点是否在多边形的Python实现及小应用(射线法)

判断一个点是否在多边形是处理空间数据时经常面对的需求,例如GIS软件中的点选功能、根据多边形边界筛选出位于多边形的点、求交集、筛选不在多边形的点等等。...面积和法:求判断点与多边形边组成的三角形面积和,等于多边形面积则点在多边形内部。...射线法的原理及实现 射线法就是以判断点开始,向右(或向左)的水平方向作一射线,计算该射线与多边形每条边的交点个数,如果交点个数为奇数,则点位于多边形,偶数则在多边形外。...点在多边形的应用 上面第一段已经描述了一些应用场景,下面给出一个应用的例子:有一堆点数据存在csv文件里,如何检索位于某个城市的点出来,检索出来之后的分析(例如加标签、改属性、做统计还是其他)这里不讨论...[float(line[pindex[0]]), float(line[pindex][1])] if isPoiWithinPoly(point, polygon): #在多边形

9.3K40

追加POI搜索之多边形面范围搜索及操作模板整理

于是,补上POI搜索中可能更为刚需的多边形面范围搜索功能搜索,同时为了让操作更友好,特意花时间整理了地理数据掘宝系列的模板文件,按着模板填数,连文档都不用细看,都可正确操作到位。...有了这些前设的准备,本篇就可以复用前面的功能及知识,做出自己所需的自定义多边形面范围的POI搜索。...POI搜索之多边形面范围搜索应用场景 当我们想了解下某个区域的竞争对手信息,此区域非标准的地理划分区域时,多边形面搜索就有其用途。 例如搜索广州北京路商圈的服饰品牌店铺或商圈的餐饮品牌分布。...最后我们多边形POI搜索后的结果,可以满足我们分析需求,仅多边形区域返回结果,并且可以批量多个区域搜索一次性返回结果。...通过【生成多边形面参数】功能,将多个单元格的坐标点,连接成一个单元格内容合并汇总为POI多边形搜索所需的参数形式。 ?

99320
领券