c++ 判断点是否在多边形内
2010-01-05 13:16
225 查看
再经典不过的算法了:
// 功能:判断点是否在多边形内
// 方法:求解通过该点的水平线与多边形各边的交点
// 结论:单边交点为奇数,成立!
//参数:
// 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);
}
// 功能:判断点是否在多边形内
// 方法:求解通过该点的水平线与多边形各边的交点
// 结论:单边交点为奇数,成立!
//参数:
// 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);
}
相关文章推荐
- C++ 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 判断一个点是否在多边形内 C++
- 【C/C++学习笔记】判断一个点是否在多边形内部的例子
- c++ 判断点是否在多边形内(转载)
- 使用C++判断两矩形是否相交
- C/C++判断某一文件或目录是否存在
- 判断点是否在多边形内
- 判断是否是凸多边形,判断点是否在多边形内,点到直线的距离
- 多边形顺时针方向判断公式及C++代码实现一
- 数据结构 - 判断单链表是否有环(C++)
- C++ access函数判断文件是否存在
- C++判断文件夹是否存在
- C++ 读取文件中的数字 并存放到vector中 在由vector存放到 multimap中 最后BFS 判断是否连通
- c# 判断两条线段是否相交(判断地图多边形是否相交)
- 怎么样判断一个点是否在多边形内?
- 判断点是否在多边形内
- C++注册,卸载OCX控件,以及判断是否注册
- C++判断输入内容是否为整数
- C++ 代码统计工具 & 判断一行代码是否为注释行
- 判断两个字符串内数字是否相同,向量相同的C++程序。