如何判断一个点是否在不规则图形内部?

网上查了下,有办法是说连接目标点与各顶点,然后算夹角,加起来为360度,则在内部,否则在外部,但是这种办法对凹形不对。

 

1) 我自己想了个办法:

     直接沿这个目标点画一条垂直线,跟各边形成的所有交点,都在目标点的同一侧,则在图形外,如果不在同一侧(凹形左旋转90度,不在同一侧)则继续画一根水平线,如果跟各边形成的所有交点,都在目标点的同一侧,则在图形外。

 

2) 还有个办法:

先设定图外一个点X,然后将测定点P和X之间连线PX,如果PX跟图的交点是偶数个(0,2,4,...)则测定点P在图外;如果交点是奇数个(1,3,5,...),则测定点P在图内。

也可以反过来做,就是先设定图内有一个点X,不过计算交点数量就要反过来,偶数说明测定点P在图内,奇数才是图外。



这样就把命题改变为:检查PX跟该多边形所有边线的总交点数量。线段和线段的交点,是可以用公式计算的。

参见我发布的帖子:http://topic.csdn.net/u/20120925/15/cf7d156e-be45-462b-932d-92f7ee61d400.html?seed=1889105761&r=79756354#r_79756354

 

代码:

http://stackoverflow.com/questions/8721406/how-to-determine-if-a-point-is-inside-a-2d-convex-polygon

 

 

/**

 * 验证测试点是否在图形内

 */ 

private function validateRoom(roomNodes:ArrayCollection,nowPosition:Point):Boolean{

var points:Array = new Array();

for each(var node:Node in roomNodes){

points.push(node.location);

}

var i:int;

var j:int;

var result:Boolean = false;

for (i = 0, j = points.length - 1; i < points.length; j = i++) {

if ((points[i].y > nowPosition.y) != (points[j].y > nowPosition.y) &&

(nowPosition.x < (points[j].x - points[i].x) * (nowPosition.y - points[i].y) / (points[j].y-points[i].y) + points[i].x)) {

result = !result;

}

}

return result;

}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值