`

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

 
阅读更多

网上查了下,有办法是说连接目标点与各顶点,然后算夹角,加起来为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;

}

分享到:
评论

相关推荐

    算法学习:判断某一点在一个不规则的图形内部

    算法学习:判断某一点在一个不规则的图形内部

    判断一系列坐标点是否在封闭图形内

    文件中给了障碍物的数据,使用者也可自行修改各种数据,算法实现判断坐标点是否在三角形内,若在就删除

    判断点在地图闭合区域内还是外算法

    可以快速的判断某点在地图闭合区域范围内还是在区域内。

    Python实现不规则图形填充的思路

    (只有先把不规则图形的结构分析清楚,才能进一步填充它。) 先画一个框架: #调用的库 import math import numpy as np import matplotlib.pyplot as plt #画图的基础设置 fig = plt.figure(1) ax = fig.add_...

    基于蒙特卡洛法求图形面积python源码+项目说明.zip

    在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?蒙特卡洛(MonteCarlo)方法告诉我们,均匀的向该正方形内撒N(N 是一个很大的自然数)个...

    html5中监听canvas内部元素点击事件的三种方法

    本文将介绍三种方法,判断坐标点是否位于某个canvas图形内部。 约定 本文介绍的三种方法适用于识别canvas内形状不规则而且位置无规律的图形点击事件,对于形状规则或者位置有规律的场景,肯定有更简便的实现,这里...

    天乙智能图形SmartGraphX部件

    不仅支持图形画面的无级缩放和无限制移动,以及图形闪烁,动画显示,图形形态变化等功能,并且支持图形内部及个图形对象间的逻辑关系操作,实现图形内部及图形间的形态变化和行为动作的联动,生动形象地反映事物间...

    天乙智能图形

    不仅支持图形画面的无级缩放和无限制移动,以及图形闪烁,动画显示,图形形态变化等功能,并且支持图形内部及个图形对象间的逻辑关系操作,实现图形内部及图形间的形态变化和行为动作的联动,生动形象地反映事物间...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    《你必须知道的495个C语言问题》

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...

    Android不规则封闭区域填充色彩的实例代码

    在上一篇的叙述中,我们通过图层的方式完成了图片颜色的填充(详情请戳:Android不规则图像填充颜色小游戏),不过在着色游戏中更多的还是基于边界的图像的填充。本篇博客将详细描述。 图像的填充有2种经典算法。 一...

    计算多边形内最大矩形

    计算多边形内最大矩形算法和几何原理说明,源码是java写的,不过看明白算法用其他语言也一样

    C语言FAQ 常见问题列表

    o 7.1 我在一个源文件中定义了 char a[6], 在另一个中声明了 extern char *a 。为什么不行 ? o 7.2 可是我听说 char a[ ] 和 char *a 是一样的。 o 7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ? ...

    软件工程知识点

    在进行概要设计时,模块的独立性是一个有关质量的重要技术性指标,可以使用模块的内聚、耦合这两个定性参数对模块独立性进行度量。 2.软件详细设计 设计工作的第二步是详细设计,它以概要设计为依据,用于确定软件...

    理解图卷积网络的节点分类

    在过去的十年中,神经网络取得了巨大的成功。但是,只能使用常规或欧几里得数据来实现...我还将在使用NetworkX构建第一个图形时给出一些非常基本的示例。到本文结尾,我希望我们对图卷积网络内部的机制有更深入的了解。

    用Delphi实现Word文件的预览

    我们对使用 BufferedImage 对象的兴趣意味着我们将不再花费精力去研究减少处理器时间的最佳技术,而是把注意力放在理解怎样才能在一个程序内部创建和使用图像上。 我们的 BufferedImage 对象看上去如图 1 中的...

    03五子棋(控制台版)程序.zip

    "03五子棋(控制台版)程序.zip" 是一个使用Python语言编写的自动化办公文件包,它实现了一个在控制台上运行的五子棋游戏。五子棋是一种双人对弈的策略型棋类游戏,规则是在棋盘上连成五个相同棋子的一方为胜,无论...

    农村土地确权数据处理编辑软件

    4、一个完整的宗地上好后,可以在软件中注记删除宗地内部界址点号;注记删除界线边长;注记删除宗地名称。有多个选项的操作可具体参照CAD命令行提示。 5、一个村、一个镇、一个县完成后,应用相应的行政界线依照接边...

Global site tag (gtag.js) - Google Analytics