判断一个点是否在闭合区域内
判断一个点,或者说某个物体是否在一个多边形内,或者说是否在某个区域内,在几何算法中还是比较常见的也比较实用的,如何判断呢,这在凸多边形里面应该比较容易,但是不规则多边形就需要比较特殊的方法了。无论是凹多边形,凸多边形,长歪了的各种多边形里面都适用。 本文使用射线法判断点是否在多边形内部。
//判断点是否在闭合区域内 bool IsPointInPolygon(Point p, vector points) { //vector points:表示闭合区域由这些点围成 double minX = points[ 0 ].x; double maxX = points[ 0 ].x; double minY = points[ 0 ].y; double maxY = points[ 0 ].y; for ( unsigned int i = 1 ; i < points.size() ; i++ ) { Point q = points[ i ]; minX = min( q.x, minX ); maxX = max( q.x, maxX ); minY = min( q.y, minY ); maxY = max( q.y, maxY ); } if ( p.x < minX || p.x > maxX || p.y < minY || p.y > maxY ) { return false; } bool inside = false; for ( unsigned int i = 0, j = points.size() - 1 ; i < points.size() ; j = i++ ) { if ( ( points[ i ].y > p.y ) != ( points[ j ].y > p.y ) && p.x < ( points[ j ].x - points[ i ].x ) * ( p.y - points[ i ].y ) / ( points[ j ].y - points[ i ].y ) + points[ i ].x ) { inside = !inside; } } return inside; }