判断一个点是否在多边形内部,射线法思路,C#实现

感谢原作者,原理请看原作者的文章 http://www.html-js.com/article/1517

C#实现

    public string rayCasting(PointF p, PointF[] poly)
{
var px = p.X;
var py = p.Y;
var flag = false; int l = poly.Length;
int j = l - ; for (var i = ; i < l; i++)
{
var sx = poly[i].X;
var sy = poly[i].Y;
var tx = poly[j].X;
var ty = poly[j].Y; // 点与多边形顶点重合
if ((sx == px && sy == py) || (tx == px && ty == py))
{
return = "on";
} // 判断线段两端点是否在射线两侧
if ((sy < py && ty >= py) || (sy >= py && ty < py))
{
// 线段上与射线 Y 坐标相同的点的 X 坐标
var x = sx + (py - sy) * (tx - sx) / (ty - sy); // 点在多边形的边上
if (x == px)
{
return "on";
} // 射线穿过多边形的边界
if (x > px)
{
flag = !flag;
} } j = i;
} // 射线穿过多边形边界的次数为奇数时点在多边形内
return = flag ? "in" : "out";
}
上一篇:windows下mongodb基础玩法系列一介绍与安装


下一篇:web - float , 浮动