首页
学习
活动
专区
工具
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...改进空间 很多情况下在使用该算法之前,需要一个快速检测的功能:当点不在多边形的外包矩形的时候,那么点一定不在多边形

6K30

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

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

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

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

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

    95230

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

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

    1.8K20

    PostGIS空间数据库简明教程

    1.1 矢量 - Vectors与图形设计软件类似,空间矢量数据支持基本的几何形状,如点、线串和多边形。...除了基本的几何图形,PostGIS 还支持一些更高级的几何图形:多版本的基本几何图形 - 点、线串或多边形的同质集合基本几何图形的 3D 版本 - 与添加了 Z 坐标的基本几何图形相同几何集合——任意几何的集合...它包括有关坐标系的信息、(0, 0) 点在地球上的位置、坐标的分辨率以及地图上的坐标如何与地球上的实际点相对应。...这意味着 PostGIS 将允许插入具有任何 SRID 的多边形。 在我们无法预测或更改传入数据的 SRID 的情况下,这有时很有用,甚至是必要的,但应尽可能避免。...,该多边形可以与另一个多边形相交而不会出现错误。

    3K30

    POSTGIS 总结

    geometry A, geometry B)**将返回TRUE ST_Within和ST_Contains ST_Within()和ST_Contains()测试一个几何图形是否完全位于另一个几何图形...如果第一个几何图形完全位于第二个几何图形,则ST_Within(geometry A, geometry B)返回TRUE,ST_Within()测试的结果与ST_Contains()完全相反 如果第二个几何图形完全包含在第一个几何图形...ST_PointOnSurface(geometry) —— 返回保证在输入多边形的点。从计算上讲,它比centroid操作代价要大得多。...,则该多边形就是简单的 7.3.2 多多边形多边形里只要各个子元素(单多边形)是简单的、有效的,而且子元素之间只在有限的点上接触,那么它就是简单的、有效的。...无论是绘制多边形的方向、定义多边形的起点,还是使用的点的个数的差异在这里都不重要。重要的是多边形包含相同的空间区域。

    6.1K10

    平面几何:判断点是否在凸多边形

    今天我们来实现判断点是否在凸多边形的算法。 需求 提供一个凸多边形(用点数组表示),以及一个点,判断这个点是否在多边形。 凸多边形,指的边不存在自我相交,且内角小于 180 度的多边形。...我们计算凸多边形的所有边向量,和边向量起点到起点的叉乘,记为点相对边的方向。 如果方向都是左边,或都是右边,则点在多边形,否则点不在凸出变形。...特殊的,对于点在某条边上,它介于在和不在凸多边形上的中间态,属于边缘情况,读者可自行定义。 代码实现 代码基于 TypeScript 实现。...const currDir = Math.sign(a.x * b.y - a.y * b.x); // 点在边上,跳过 if (currDir === 0) {...== currDir) { return false; } } // 点都在边的同一方向上 return true; }; 这里我认为点在边上,也算在凸多边形上,所以当叉积计算出了

    17210

    深入探索地理空间查询:如何优雅地在MySQL、PostgreSQL及Redis中实现精准的地理数据存储与检索技巧

    在实际应用中,我们可能需要查询某个区域(多边形的所有点。...PostgreSQL & PostGIS:专业的地理空间数据处理 2.1 创建表格和数据插入 在 PostgreSQL 中,我们将使用 PostGIS 扩展来存储和操作地理空间数据。...2.3 多边形查询 PostGIS 还允许我们对多边形进行查询。例如,我们可以查询一个点是否位于一个多边形,或者找出与一个多边形相交的所有其他多边形。...3.5 利用半径查询进行群体分析 通过GEORADIUS或GEORADIUSBYMEMBER,我们可以找到一个区域的所有对象,并在此基础上进行进一步的分析和处理。...PostGIS Documentation, PostGIS. Redis Commands, Redis Geo. 感谢大家的阅读,我是猫头虎博主,我们下次见!

    71610

    一篇文章带你玩转PostGIS空间数据库

    但是这个哥们只表示了二维,而PostGIS扩展了3维、4维的表示。 说人话,就是可以表示:点、线串、多边形、图形集合(Collection)。 举一个图形集合的例子。...ST_Touches()测试两个几何图形是否在它们的边界上接触,但在它们的内部不相交 ST_Within()和ST_Contains()测试一个几何图形是否完全包含于另一个几何图形 ST_Distance...这对于空间连接(spatial join)非常有用,因为在两个多边形图层上使用St_Intersects(geometry, geometry)通常会导致重复计算:位于两个多边形的边界上的多边形将与两侧的多边形都相交...ST_PointOnSurface(geometry) —— 返回保证在输入多边形的点。从计算上讲,它比centroid操作代价要大得多。...无论是绘制多边形的方向、定义多边形的起点,还是包含的点的个数的差异在这里都不重要。重要的是多边形包含相同的空间区域,它们就相等。

    6K50
    领券