170 字
1 分钟

判断目标点是否在凸多边形区域

2025-05-08
无标签

目标点 pp 对凸多边形每个顶点之间建立一个向量 vecvec(如:vpv1\vec{v}_{p\to v_{1}}),该向量与其对应的顶点的边 edgeedge(如:v2v1v_{2}-v_{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;