bool CTriObject::PtInPolygon (Point p, Point* ptPolygon, int nCount)
{
// 交点个数
int nCross = 0;
for (int i = 0; i < nCount; i++)
{
Point p1 = ptPolygon[i];
Point p2 = ptPolygon[(i + 1) % nCount];// 最后一个点与第一个点连线
if ( p1.y == p2.y )
continue;
if ( p.y < min(p1.y, p2.y) )
continue;
if ( p.y >= max(p1.y, p2.y) )
continue;
// 求交点的x坐标
double x = (double)(p.y - p1.y) * (double)(p2.x - p1.x) / (double)(p2.y - p1.y) + p1.x;
// 只统计p1p2与p向右射线的交点
if ( x > p.x )
{
nCross++;
}
}
// 交点为偶数,点在多边形之外
return (nCross % 2 == 1);
}
C++ 判断点是否在一个面内
最新推荐文章于 2023-02-06 13:45:52 发布