|
|
发表于 2004-11-3 15:32:00
|
显示全部楼层
Re:求助:怎样判断一个点是否在一个封闭区域内
1.3楼的求法好像不行如: " B. " .在B方格的右下房,但是不在区域内.
2.8楼的多边形面求法是7楼的那种发发吗?7楼N(V-A)容易得出来吗?怎样求最简单?
3.封闭区域如何描述?顶点(边||面)描述?面描述?还是其他方法?
如果是顶点描述(多边形)那么用奇偶点法应该比较方便把.以下算法请大家指正:
假定此n边多边形没有边界(边,面)交叉部分,可以是凹或凸多边形
a.选定一个方向(如x正向)
b.从判定点P引出一条射线,初始化计数器cP=0
c.依次判断该直线是否传过各边界,如果是cP++;知道所有边界都判断完
(这里以2d,x正方向为例:
for(i=0;i<n;i++){
if(MAX(Line(i).star.x,Line(i).end.x)< .x) continue;//第i边Line(n)最大x坐标比p小
//则不可能有焦点go下一个
if(Line(i).star.y*Line(i).end.y<0) {cp++;continue;} //传过第i个边界
else if(Line(i).star.y*Line(i).end.y==0&&Line(i).star.y!=0) //边界点
{Line(i+1).star=Line(i).star; continue;} //这里line[n+1]改变了
}
d.判断cP的奇偶,奇内偶外
4.上面只是n边多边形即边界是直线或平面的简陋算法,而且在边界上的点没有定义内外.嗯,其实多边形面求法应该算是比较完整简洁的算法,呵呵,还是想求 N(V-A)>0 的算法. |
|