170 字
1 分钟
判断目标点是否在凸多边形区域

目标点 对凸多边形每个顶点之间建立一个向量 (如:),该向量与其对应的顶点的边 (如:)进行叉乘,得到一个叉积值。
若每个叉积值的符号都一样(都是正数/都是负数),则证明点在凸多边形内。
否则,则证明点不再凸多边形内。
bool Chunk::inChunk(Vector2 p){ int size = vertexs.size(); for(int i = 0; i < size; ++i) { //假设凸多边形的边edge都是逆时针方向 Vector2 edge = vertex[(i+1)%size]-vertex[i]; Vector2 vec = vertex[i] - p; int result = cross(edge,vec); //若点在凸多边形内,得到的叉积值应都是正数 if(sign(result) == 0) return false; } return true;