本文共 682 字,大约阅读时间需要 2 分钟。
{
int nCount = myPts.Count;
int nCross = 0;
for (int i = 0; i < nCount; i++)
{
Point p1 = myPts[i];
Point p2 = myPts[(i + 1) %nCount];
// 求解 y=p.y 与 p1p2 的交点
if (p1.Y == p2.Y)
continue;
// 交点在p1p2延长线上
if (Y < Math.Min(p1.Y,p2.Y))
continue;
// 交点在p1p2延长线上
if (Y >= Math.Max(p1.Y,p2.Y))
continue;
// 求交点的 X 坐标--------------------------------------------------------------
double x = (double)(Y - p1.Y) *(double)(p2.X - p1.X) / (double)(p2.Y - p1.Y) + p1.X;
if (x > X)
nCross++; // 只统计单边交点
}
// 单边交点为偶数,点在多边形之外 ---
return (nCross % 2 == 1);
}
本文转自h2内存数据库博客园博客,原文链接:http://www.cnblogs.com/h2-database/archive/2012/07/07/2583419.html,如需转载请自行联系原作者