static bool PointInPolygon(utmpos p, List<utmpos> poly)
{
utmpos p1, p2;
bool inside = false;
if (poly.Count < 3)
{
return inside;
}
utmpos oldPoint = new utmpos(poly[poly.Count - 1]);
for (int i = 0; i < poly.Count; i++)
{
utmpos newPoint = new utmpos(poly[i]);
if (newPoint.y > oldPoint.y)
{
p1 = oldPoint;
p2 = newPoint;
}
else
{
p1 = newPoint;
p2 = oldPoint;
}
if ((newPoint.y < p.y) == (p.y <= oldPoint.y)
&& ((double)p.x - (double)p1.x) * (double)(p2.y - p1.y)
< ((double)p2.x - (double)p1.x) * (double)(p.y - p1.y))
{
inside = !inside;
}
oldPoint = newPoint;
}
return inside;
}