【 tulaoshi.com - ASP.NET 】
                             
                             接上次的文章
 考虑不周,请多指教
原理
 先通过点做向右的一条射线
 如果射线与多边形相交的点为奇数,则在多边形内。
 是否相交判断:
 1。判断在边的左边或右边(也有可能在线段上或线段的延伸线上)
 2。判断点的Y值是否在线段两个端点Y值之间
 所有边(点在此边之左)的和如果是奇数,则在多边形内
 特殊情况处理:
 第一种情况可不考虑
 第二种情况认为没有交点(有无数个交点),在线段的延伸线上 
 
 代码如下:
 /// 
 /// 
 ///  /// 
 /// 
 /// 
0:在多边形外 1:在多边形内 5:点在多边形边上  public static int PtInPolygon( MapPoint mpPt,MapPolygon ply)
 {
 int iRightCross = 0; //射线与多边形边相交的个数
 MapPoint mpNext = null;
 for( int i=0; i
 {
 if( i == ply.PtsCount-1 )
 mpNext = ply[0];
 else 
 mpNext = ply[i+1];
 int iRe = PtInLine( mpPt.X,mpPt.Y,ply[i].X,ply[i].Y,mpNext.X,mpNext.Y);
 if( iRe == 5 )//在多边形边上
 return 5;
 else if( iRe != 0 )
 {
 if( ply[i].Y > mpNext.Y )
 {
 if( mpPt.Y <= ply[i].Y && mpPt.Y >= mpNext.Y )
 {//与判断点的水平线相交
 if( iRe == 1 )
 iRightCross++;
 }
 }
 else
 {
 if( mpPt.Y <= mpNext.Y && mpPt.Y >= ply[i].Y )
 {
 if( iRe == 1 )
 iRightCross++;
 }
 }
 }
 }
 return iRightCross % 2;
 }
代码怎么贴好看一点?