判断点是否在多边形内的算法
来源:互联网 发布:禁用的网络怎么恢复 编辑:程序博客网 时间:2024/05/17 21:54
如果判断点是否在凸多边形内,则有多种方法,方法简单,计算速度也快,直接使用物理引擎做判断也行
但实际问题中遇到的多边形不一定是凸多边形,它可能是凹边行或者复合多边形
判断一个点在多边形内或多边形外,射线法是个不错的选择
射线法,判断一点是否在多边形内或多边形外,只要从这点起,作一条射线,例如,沿x向直到负无穷,如果越过的边数是单数,这点就在多边形内,越过的边数是偶数,这点就在多边形外。
如图
1)如果射线正好穿过P1或者P2,那么这个交点会被算作2次,处理办法是如果P的从坐标与P1,P2中较小的纵坐标相同,则直接忽略这种情况
2)如果射线水平,则射线要么与其无交点,要么有无数个,这种情况也直接忽略。
3)如果射线竖直,而P0的横坐标小于P1,P2的横坐标,则必然相交。
4)再判断相交之前,先判断P是否在边(P1,P2)的上面,如果在,则直接得出结论:P再多边形内部
计算X轴坐标
//计算交点逻辑
tanα = b / c;
tanα = d / a;
d = b*a / c;
代码:
bool HelloWorld::IsPointInsideShape(Vec2 pos,std::vector<Vec2>& m_vAllShape){ int nCross = 0; int nCount = (int)m_vAllShape.size(); Vec2 p = pos; for (int i = 0; i < nCount; i++) { Vec2 p1 = m_vAllShape[i]; Vec2 p2 = m_vAllShape[(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++; // 只统计单边交点 } } // 单边交点为偶数,点在多边形之外// if (nCross % 2 == 1) {// log("在多边形内");// }// if (nCross % 2 == 0) {// log("在多边形外");// } return (nCross % 2 == 1);}
0 0
- 判断点是否在多边形内的算法
- 点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部
- objective-c判断点是否在多边形内(包括在多边形上)的一个经典算法
- 判断点是否在多边形内(包括在多边形上)的一个算法
- objective-c判断点是否在多边形内(包括在多边形上)的一个经典算法
- 判断点在多边形内的算法
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- C++ 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部翻译 (转)
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- protobuf简介
- JSP中的TAG
- SVN clean Up 失败处理方法
- 寻找IP的命令行方法!
- Objective-C第六版第12章----Preprocessor
- 判断点是否在多边形内的算法
- c#获取计算机制造商信息
- VS2008 生成DLL加载DLL
- Bash学习手册
- static 总结(表格)
- HMM 隐马尔可夫模型
- Java把字符串中的unicode码替换成相应的字符
- Input Layout
- 概率机器学习和人工智能(Probabilistic machine learning and artificial intelligence_Nature2015)