转载自:http://blog.csdn.net/okvee/article/details/5643407
再经典不过的算法了:
// 功能:判断点是否在多边形内
// 方法:求解通过该点的水平线与多边形各边的交点
// 结论:单边交点为奇数,成立!
//参数:
// POINT p 指定的某个点
// LPPOINT ptPolygon 多边形的各个顶点坐标(首末点可以不一致)
// int nCount 多边形定点的个数
BOOL PtInPolygon (POINT p, LPPOINT ptPolygon, int nCount)
{
int nCross = 0;
for (int i = 0; i < nCount; i++)
{
POINT p1 = ptPolygon[i];
POINT p2 = ptPolygon[(i + 1) % nCount];
// 求解 y=p.y 与 p1p2 的交点
if ( p1.y == p2.y ) // p1p2 与 y=p0.y平行
continue;
if ( p.y < min(p1.y, p2.y) ) // 交点在p1p2延长线上
continue;
if ( p.y >= max(p1.y, p2.y) ) // 交点在p1p2延长线上
continue;
// 求交点的 X 坐标 --------------------------------------------------------------
double x = (double)(p.y - p1.y) * (double)(p2.x - p1.x) / (double)(p2.y - p1.y) + p1.x;
if ( x > p.x )
nCross++; // 只统计单边交点
}
// 单边交点为偶数,点在多边形之外 ---
return (nCross % 2 == 1);
}
分享到:
相关推荐
java 判断点在多边形内 java 判断点在多边形内 java 判断点在多边形内 java 判断点在多边形内 java 判断点在多边形内 Java GIS 多边形 Java点多边形
判断点在多边形内 VB 计算机图形学作业 CG
算法判断点在多边形内
易语言判断点在多边形内外源码,判断点在多边形内外,pointjs
/** 判断点在多边形内算法. * 使用计算几何中的弧线法,内角和法的一种变形. * 与射线法、内角和法一样,时间复杂度是O(n). * @param point 待判断的点 * @param poly 多边形,这里简单地看做为一个点集 */
点是否在多边形内判断的C语言代码,有2维及3维两种情况的判断, 请注意:如果你决定使用其中某个函数,请将它拷出来,每个函数都能用,对应于不同的算法,请看说明,最后一个函数为三维情况。
判断点是否在多边形内 #include #include #include #define max(a,b) ((a>b)?a:b) #define min(a,b) ((a)?a:b) using namespace std; const double INFINITY = 1e10; const double ESP = 1e-5; const int MAX_N ...
判断点在多边形内,射线和多边形算出奇数个交点,在多边形内
点与多边形关系判断,采用角度和判别法,支持判断点在多边形内部,线上,及外部。
使用R语言判断点在多边形内~~读取shp格式文件
判断某点是否在任意多边形C语言源码,使用射线法设计,包含设计说明
判断点和多边形的位置,判断点和多边形的位置,判断点和多边形的位置
易语言源码易语言判断点在多边形内外源码.rar
判断点是否多边形内 基本思想是利用射线法,计算射线与多边形各边的交点,如果是偶数,则点在多边形外,否则在多边形内。还会考虑一些特殊情况,如点在多边形顶点上,点在多边形边上等特殊情况。
点在多边形的边上 前面我们讲到,射线法的主要思路就是计算射线穿越多边形边界的次数。那么对于点在多边形的边上这种特殊情况,射线出发的这一次,是否应该算作穿越呢?
先输入多边形的顶点数,左击即可判断点击的点是否在多边形内
自己的计算机图形学作业,用vc++编写的,判断点在是否多边形内部:从各点向多边形P顶点发出射线,形成有向角,各角度和为360则点在多边形内部,为0则在多边形外部,其余情况分别为在顶点上和在边上。
C++版本判断点是否落入多边形内原理讲解及代码实现
以点(0,1),多边形顶点(1,2),(2,1),(3,3)为例写的一个简单的射线法,主要部分(即:射线法判断部分)已实现,可用于任何程序,如需扩展,只需将输入的点和顶点的点数组扩充一下输入方式,即可。...
该工具类可以判断一个点是否在多边形内,据此可以判断,一个人是否在某个区域内,将多边形坐标作为一个字符串数组传入,再传入点的坐标,即可进行判断