网上查了下,有办法是说连接目标点与各顶点,然后算夹角,加起来为360度,则在内部,否则在外部,但是这种办法对凹形不对。
1) 我自己想了个办法:
直接沿这个目标点画一条垂直线,跟各边形成的所有交点,都在目标点的同一侧,则在图形外,如果不在同一侧(凹形左旋转90度,不在同一侧)则继续画一根水平线,如果跟各边形成的所有交点,都在目标点的同一侧,则在图形外。
2) 还有个办法:
先设定图外一个点X,然后将测定点P和X之间连线PX,如果PX跟图的交点是偶数个(0,2,4,...)则测定点P在图外;如果交点是奇数个(1,3,5,...),则测定点P在图内。
也可以反过来做,就是先设定图内有一个点X,不过计算交点数量就要反过来,偶数说明测定点P在图内,奇数才是图外。
这样就把命题改变为:检查PX跟该多边形所有边线的总交点数量。线段和线段的交点,是可以用公式计算的。
代码:
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;
}
发表评论
-
dssddssdsdsd
2014-07-02 17:22 806登录不要刷新发布文章没有判断内容是否为空您正在使用低版本浏览 ... -
hello
2014-07-02 17:22 697登录不要刷新发布文章没有判断内容是否为空您正在使用低版本浏览 ... -
华为账号
2013-05-18 09:53 0华为账号:dKF76008 yulong_deng1 -
用js获取后台返回的List对象
2013-05-17 10:59 1652function getEquimentType(){ ... -
cc222
2013-03-29 18:16 0dfdf -
Calendar注意
2013-03-27 19:41 804public static void main(String ... -
spring与ibatis继承
2012-12-22 15:59 01.applicationContext.xml: & ... -
我参与的敏捷开发3
2012-12-22 15:45 0软件工程师(软件项目迭代开发): 概 ... -
我参与的敏捷开发2
2012-12-22 15:23 0系统工程师(SE): 概念阶段TR1: ... -
我参与的敏捷开发1
2012-12-22 12:18 0敏捷软件开发流程: 项目开始 -> 需求分 ... -
某设计项目功能
2012-12-21 16:24 0IDS1000(集群); 箱体选型 ... -
MySQL-Front.exe
2012-12-21 15:57 748mysql数据库MySQL-Front.exe -
mysql软件
2012-12-03 09:52 1033mysql软件:MySQL-Front -
界面设计工具UIDesigner或者GUI
2012-09-19 16:14 580UI Designer,http://uid.cdc.t ... -
技术随想
2012-08-31 09:51 714技术好比分为 内功和外功,外功只是体现在在应用方面,也就是技术 ... -
几年工作应该具有的
2012-08-31 09:31 775我们不需要熟练工,我们需要在某领域拥有超过常人的积累认知, ... -
比较好用的截图软件并且可标注
2012-08-30 09:50 698Greenshot -
补发新概念,织一片头发补在脱发处
2012-08-29 10:00 0如何治疗脱发已经成为一个世界性难题,继药物治疗、植发手 ... -
值得看下脱发的网站
2012-08-29 09:52 0本人有一味祖传秘方专治脱发生发的药,纯中药制做.效果迅速有效. ... -
poi数据有效性(下拉列表)
2012-08-28 12:14 3100版本poi3.8 public class Test ...
相关推荐
算法学习:判断某一点在一个不规则的图形内部
文件中给了障碍物的数据,使用者也可自行修改各种数据,算法实现判断坐标点是否在三角形内,若在就删除
可以快速的判断某点在地图闭合区域范围内还是在区域内。
(只有先把不规则图形的结构分析清楚,才能进一步填充它。) 先画一个框架: #调用的库 import math import numpy as np import matplotlib.pyplot as plt #画图的基础设置 fig = plt.figure(1) ax = fig.add_...
在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积,怎么计算列?蒙特卡洛(MonteCarlo)方法告诉我们,均匀的向该正方形内撒N(N 是一个很大的自然数)个...
本文将介绍三种方法,判断坐标点是否位于某个canvas图形内部。 约定 本文介绍的三种方法适用于识别canvas内形状不规则而且位置无规律的图形点击事件,对于形状规则或者位置有规律的场景,肯定有更简便的实现,这里...
不仅支持图形画面的无级缩放和无限制移动,以及图形闪烁,动画显示,图形形态变化等功能,并且支持图形内部及个图形对象间的逻辑关系操作,实现图形内部及图形间的形态变化和行为动作的联动,生动形象地反映事物间...
不仅支持图形画面的无级缩放和无限制移动,以及图形闪烁,动画显示,图形形态变化等功能,并且支持图形内部及个图形对象间的逻辑关系操作,实现图形内部及图形间的形态变化和行为动作的联动,生动形象地反映事物间...
1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...
1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 13 声明问题 14 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 14 *1.26 main的正确...
在上一篇的叙述中,我们通过图层的方式完成了图片颜色的填充(详情请戳:Android不规则图像填充颜色小游戏),不过在着色游戏中更多的还是基于边界的图像的填充。本篇博客将详细描述。 图像的填充有2种经典算法。 一...
计算多边形内最大矩形算法和几何原理说明,源码是java写的,不过看明白算法用其他语言也一样
o 7.1 我在一个源文件中定义了 char a[6], 在另一个中声明了 extern char *a 。为什么不行 ? o 7.2 可是我听说 char a[ ] 和 char *a 是一样的。 o 7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ? ...
在进行概要设计时,模块的独立性是一个有关质量的重要技术性指标,可以使用模块的内聚、耦合这两个定性参数对模块独立性进行度量。 2.软件详细设计 设计工作的第二步是详细设计,它以概要设计为依据,用于确定软件...
在过去的十年中,神经网络取得了巨大的成功。但是,只能使用常规或欧几里得数据来实现...我还将在使用NetworkX构建第一个图形时给出一些非常基本的示例。到本文结尾,我希望我们对图卷积网络内部的机制有更深入的了解。
我们对使用 BufferedImage 对象的兴趣意味着我们将不再花费精力去研究减少处理器时间的最佳技术,而是把注意力放在理解怎样才能在一个程序内部创建和使用图像上。 我们的 BufferedImage 对象看上去如图 1 中的...
"03五子棋(控制台版)程序.zip" 是一个使用Python语言编写的自动化办公文件包,它实现了一个在控制台上运行的五子棋游戏。五子棋是一种双人对弈的策略型棋类游戏,规则是在棋盘上连成五个相同棋子的一方为胜,无论...
4、一个完整的宗地上好后,可以在软件中注记删除宗地内部界址点号;注记删除界线边长;注记删除宗地名称。有多个选项的操作可具体参照CAD命令行提示。 5、一个村、一个镇、一个县完成后,应用相应的行政界线依照接边...