Android 判断某个点位于多边形内-推荐射线法
来源:互联网 发布:eclipse导入jre源码 编辑:程序博客网 时间:2024/06/05 11:44
这段事件在做一个小游戏,就用到了点在多边形内部的判断,现把资料做个总结。
用得是射线法,总的来说就是 从点 向 x 轴正方向引一条射线,如果交与奇数个点则在内部,偶数个在外部,另外对一些特殊情况作了处理。如点在线上。
另外,用向量法(点在组成多边形的有向线段的同一侧),但是高中数学都还给老师了,还需要再学啊。
-------------------------------------------------------------------------------------------------------------------
参考资料:http://www.cnblogs.com/mazhenyu/archive/2010/06/13/1757855.html 之 四,其实也是射线法
4. 水平/垂直交叉点数判别法(适用于任意多边形)
http://blog.csdn.net/kome2000/article/details/4383054
http://blog.csdn.net/kome2000/article/details/4383040
---------------------------------------------------------------------------------
原来的代码
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); }
Android代码
参数:要判断的点,多边形的所有顶点
private boolean isPolygonContainPoint(PointF pointF,PointF[] vertexPointFs){int nCross = 0;for (int i = 0; i < vertexPointFs.length; i++) {PointF p1 = vertexPointFs[i];PointF p2 = vertexPointFs[(i + 1) % vertexPointFs.length];if (p1.y == p2.y)continue;if (pointF.y < Math.min(p1.y, p2.y))continue;if (pointF.y >= Math.max(p1.y, p2.y))continue;double x = (double) (pointF.y - p1.y) * (double) (p2.x - p1.x)/ (double) (p2.y - p1.y) + p1.x;if (x > pointF.x)nCross++;}return (nCross % 2 == 1);}
--------------------
如果有问题,希望大家提出来。谢谢
- Android 判断某个点位于多边形内-推荐射线法
- 点在多边形内的判断(射线法)
- 判断点在多边形内算法(射线法)
- 射线法判断地图上点是否在多边形内
- 画射线法判断点是否在多边形内
- 射线法判断一个点是否在多边形内
- python3射线法判断点是否在多边形内
- 判断某个点是否在多边形内
- 判断点在多边形内,射线算法 分享
- 射线法判断点是否在多边形内的关键代码
- [转] 射线法判断点是否在多边形内(C#)
- poj 3182 The Grove 【BFS+判断点在多边形内 射线法】
- SGU 124. Broken line(射线法判断一个点是否在一个多边形内)
- 判断点位于多边形内部
- 判断点是否在多边形中 射线判断法
- 判断 点 是否 在 任意多边形 内部 采用射线法
- SGU 124 射线法 判断点与多边形位置关系
- 判断点在一个多边形内部——射线法
- 【翻译WINDOWS NT FILE SYSTEM INTERNAL】NT缓存管理器一(4)
- u-boot 的NAND启动方式
- 仅应用于内部互连的PCIe
- opengl绘制固定宽度多边形圆角边框算法(历时周半,撰博文以志纪念)II
- hdu1426 Sudoku Killer 深搜
- Android 判断某个点位于多边形内-推荐射线法
- Altium Designer 批量修改属性
- sphinx系列之mysql安装sphinxse支持 热插拔安装法
- Hadoop分布式集群系统添加节点
- Weblogic 10完美破解(Linux和Windows都适用)
- liferay 自定义查询
- asp.net 动态加载的用户控件属性传id值问题
- MindManager 报错:Click to restart mindjet player 解决方法
- 利用 Javascript 获取 URL 参数(适合IE、FF)