判断点与多边形的状态(位置)

哈哈_92_

哈哈_92_

2016-01-29 12:38

判断点与多边形的状态(位置),判断点与多边形的状态(位置)

接上次的文章
考虑不周,请多指教

原理
先通过点做向右的一条射线
如果射线与多边形相交的点为奇数,则在多边形内。
是否相交判断:
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;
}
代码怎么贴好看一点?
展开更多 50%)
分享

猜你喜欢

判断点与多边形的状态(位置)

电脑网络
判断点与多边形的状态(位置)

画正多边形

flash教程
画正多边形

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

AutoCAD绘制正多边形

cad教程 autocad教程 CAD
AutoCAD绘制正多边形

多边形和剪贴区域

编程语言 网络编程
多边形和剪贴区域

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Fireworks 多边形切片的妙用

电脑网络
Fireworks 多边形切片的妙用

彩色多边形纹理高清图集

电脑网络
彩色多边形纹理高清图集

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

JSP语法(2)

JSP语法(2)

高级游戏制作:Flash制作物体弹跳电脑游戏

高级游戏制作:Flash制作物体弹跳电脑游戏
下拉加载更多内容 ↓