改进弧长法 判断点是否在多边形内 c#代码

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/25 13:38:03
改进弧长法判断点是否在多边形内c#代码改进弧长法判断点是否在多边形内c#代码改进弧长法判断点是否在多边形内c#代码publicclassCoordinate{//////经度X///publicdou

改进弧长法 判断点是否在多边形内 c#代码
改进弧长法 判断点是否在多边形内 c#代码

改进弧长法 判断点是否在多边形内 c#代码
publicclass Coordinate { ////// 经度X ///publicdouble X; ////// 纬度Y ///publicdouble Y; ////// 所在象限,原点,坐标轴1,2,3,4 /// 为0时当正号处理 ///publicint Quadrant { get { if (X >= 0) { if (Y >= 0) return1; if (Y < 0) return4; } if (X < 0) { if (Y >= 0) return2; if (Y < 0) return3; } return0; } } }////// 弧长法判断点是否在多边形内 /// 第一个是若P[i]的某个坐标为0时,一律当正号处理;第二点是若被测点和多边形的顶点重合时要特殊处理.//////多边形顶点集合,有序///要判断的点///是否在多边形内publicbool InPolygon(IList p,Coordinate corrdinate) { foreach (var item in p) //把要判断的点设为原点
{ item.Y = item.Y - corrdinate.Y; item.X = item.X - corrdinate.X; } //最后一个和第一个点连,将第一个点加到最后 p.Add(p[0]); var count = 0; for (var i = 0; i 1(1-4=-3) =1if (t == 3) t = -1;//1->4(4-1=3)=-1 count += t; } if (Math.Abs(count) == 2) returntrue;//在边上if (Math.Abs(count) == 4) returntrue;//在内部if (count == 0) returnfalse;//在外部returnfalse;//异常情况 } }