objective-c判断点是否在多边形内(包括在多边形上)的一个经典算法
2011-10-02 15:28
369 查看
/** 检查某点是否包含在多边形的范围内(只用与判断在多边形内部,不包含点在多边形边上的情况)~ */
- (BOOL) checkPointWithinPolygon:(PolyVerticesWrapper*)pvw point:(b2Vec2)point {
int verticesCount = [pvw verticesCount];
b2Vec2 *ptPolygon = [pvw vertices];
int nCross = 0;
for (int i =
0; i < verticesCount; ++ i) {
float j = ptPolygon[i].x;
float k = ptPolygon[i].y;
float m = ptPolygon[(i + 1) % verticesCount].x;
float n = ptPolygon[(i + 1) % verticesCount].y;
b2Vec2 p1(j, k);
b2Vec2 p2(m, n);
//求解 y=p.y与 p1 p2
的交点
if ( p1.y == p2.y ) { // p1p2与 y=p0.y平行
continue;
}
if ( point.y <
fminf(p1.y, p2.y) ) {//交点在p1p2延长线上
continue;
}
if ( point.y >
fmaxf(p1.y, p2.y) ) {//交点在p1p2延长线上
continue;
}
//求交点的 X坐标
double x = (double)(point.y - p1.y) * (double)(p2.x - p1.x)
/ (double)(p2.y - p1.y) + p1.x;
if ( x > point.x ) {
// 只统计单边交点
nCross++;
}
}
if(nCross%2 != 0) { //单边交点为偶数,点在多边形之外
return YES;
}
else {
return NO;
}
}
- (BOOL) checkPointWithinPolygon:(PolyVerticesWrapper*)pvw point:(b2Vec2)point {
int verticesCount = [pvw verticesCount];
b2Vec2 *ptPolygon = [pvw vertices];
int nCross = 0;
for (int i =
0; i < verticesCount; ++ i) {
float j = ptPolygon[i].x;
float k = ptPolygon[i].y;
float m = ptPolygon[(i + 1) % verticesCount].x;
float n = ptPolygon[(i + 1) % verticesCount].y;
b2Vec2 p1(j, k);
b2Vec2 p2(m, n);
//求解 y=p.y与 p1 p2
的交点
if ( p1.y == p2.y ) { // p1p2与 y=p0.y平行
continue;
}
if ( point.y <
fminf(p1.y, p2.y) ) {//交点在p1p2延长线上
continue;
}
if ( point.y >
fmaxf(p1.y, p2.y) ) {//交点在p1p2延长线上
continue;
}
//求交点的 X坐标
double x = (double)(point.y - p1.y) * (double)(p2.x - p1.x)
/ (double)(p2.y - p1.y) + p1.x;
if ( x > point.x ) {
// 只统计单边交点
nCross++;
}
}
if(nCross%2 != 0) { //单边交点为偶数,点在多边形之外
return YES;
}
else {
return NO;
}
}
相关文章推荐
- objective-c判断点是否在多边形内(包括在多边形上)的一个经典算法
- 判断点是否在多边形内(包括在多边形上)的一个算法
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法,JS判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。
- 点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
- C++ 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 和大家分享一个判断点是否在多边形范围内的算法
- 判断一个坐标点是否在不规则多边形内部的算法
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 判断一个坐标点是否在不规则多边形内部的算法
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
- 经典算法 | 给定n个矩形,判断这些矩形是否在不重合的情况下组成一个大矩形的算法
- 点在多边形内算法——判断一个点是否在一个复杂多边形的内部
- 经典算法 | 计算几何 | 判断点是否在多边形内部两个算法