`

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

 
阅读更多

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

}

分享到:
评论

相关推荐

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

    本篇将详细讲解如何利用Matlab来实现这个功能,特别是判断一个点是否在三角形内的算法。 首先,我们需要理解基本的几何概念。一个封闭图形是由多个顶点(坐标点)通过线段连接形成的,如三角形、四边形等。在二维...

    画不规则图形并填充不规则图形

    综上所述,"画不规则图形并填充不规则图形"是一个涉及图形绘制、填充算法、边界处理等多个技术层面的复杂过程,而"FillGraphy"可能是一个专门用于此目的的工具或软件。通过熟练掌握这些知识,用户可以创建出具有丰富...

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

    本文主要介绍了判断某一点是否在一个不规则的图形内部的算法。该算法使用射线法判断点是否在多边形内,并对其进行了详细的解释和实现。 首先,需要了解射线法的思想。射线法是指从点P向x正方向发射一个射线,穿过...

    ShapeTouch该Javascript库用于实现H5中不规则图形按钮可点击区域的判断

    总的来说,ShapeTouch是一个强大的工具,对于需要在H5应用中实现不规则图形交互的开发者来说,它是一个不可或缺的资源。通过深入理解和熟练使用这个库,开发者可以创造出更具创新性和用户体验的H5应用。

    判断点是否在给定三角形内的matlab程序

    - 在计算机图形学、地图制图、地理信息系统(GIS)等领域,经常需要判断一个点是否位于一个三角形内部。 - 这个功能对于诸如Delaunay三角剖分等算法特别有用,因为它可以辅助确定哪些点属于特定的三角形区域。 3....

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

    在GIS(地理信息系统)和计算机图形学中,判断一个点是否位于地图闭合区域内的算法是十分关键的。这个算法通常被应用于各种场景,比如地图应用中的定位、碰撞检测、地理围栏等。这里我们将详细探讨这个算法的核心...

    不规则图形的面积计算.pdf

    例如,如果有一个包含一个空白区域的不规则图形,我们可以通过计算整个图形的面积然后减去空白部分的面积来求得阴影部分的面积。如例1所示,阴影部分的面积等于两正方形面积之和减去空白部分的面积,即(4×4+3×3)...

    Wincc7.5中如何绘制不规则图形并填充背景颜色?.docx

    在 Siemens 的 WinCC7.5 人机界面(HMI)软件中,绘制不规则图形并为其填充背景颜色是一项常见的需求,特别是在创建自定义图形元素或交互式控件时。WinCC7.5 提供了多种工具来实现这一目标,但默认的折线工具并不支持...

    Android不规则图形点击提示选中不同区域的源码

    总之,"Android不规则图形点击提示选中不同区域的源码"是一个涉及自定义视图绘制、碰撞检测、事件处理和视觉反馈的综合案例,对于深入理解Android图形系统和交互设计具有很高的参考价值。通过学习和实践,开发者可以...

    利用平移求不规则图形的周长和面积练习.doc

    例如,题目中的第一个问题要求计算班级菜园的周长,这可能需要我们将不规则图形通过平移分解成几个线段,然后将各线段长度相加。 2. **地毯长度的确定**:第二个问题涉及到楼梯的地毯铺设,实际上是在求解不规则...

    VB判断点在多边形内

    在计算机图形学中,判断一个点是否位于多边形内部是一项常见的任务,尤其在VB(Visual Basic)编程环境中。这个任务通常涉及到二维几何计算和算法的实现。在VB中,我们可以利用数学方法来解决这个问题,这通常是通过...

    关于蒙特卡诺法计算不规则图形面积的研究-并使用Python模拟并实现

    1. 将不规则图形放置在一个大的规则区域内,例如一个足够大的矩形内。 2. 在这个大区域内随机生成大量的点。 3. 统计这些点中有多少落在图形内部。 4. 根据图形区域内的点占整个区域的比例,估算图形的面积。 公式...

    计算坐标点是否在不规则四边形内-易语言

    在计算机图形学中,判断一个坐标点是否位于不规则四边形内部是一个常见的问题,尤其在游戏开发、图像处理和碰撞检测等领域。本教程将详细解释如何使用易语言实现这一功能,主要涉及的知识点包括计算两点间的距离以及...

    精彩编程与编程技巧-VB中不规则图形热点的实现...

    特别是对于不规则图形,如何准确地判断鼠标光标是否位于该图形内部,即所谓的“热点”检测,是一个具有挑战性的技术点。本文将详细介绍如何利用VB结合Windows API来实现这一功能。 #### 二、关键技术点 1. **使用...

    Inscribed_Rectangle.zip_不规则面积_内切 inscribed_图形最大

    然而,在这个问题中,“inscribed”被用来形容矩形与不规则图形的关系,意味着矩形的每一边都接触(但不穿过)不规则图形的边界。 "图形最大"是指我们要寻找的矩形应具有最大的面积。这通常涉及到计算和优化问题,...

    不规则图形的面积(人教版五年级数学上册课件).pptx

    在小学五年级数学的人教版课程中,"不规则图形的面积"是一个重要的知识点。这个主题主要教导学生如何处理和估算那些形状不规则的图形的面积。在实际生活中,我们经常会遇到各种形状复杂的图形,例如一片树叶或者一个...

    判断线段相交及点是否在多边形内

    在计算机图形学和算法设计中,判断线段相交与点是否在多边形内是常见的问题,尤其在碰撞检测、几何渲染等领域有着广泛应用。本文将深入探讨这两个知识点,并结合提供的源代码`is_iner.cpp`和文档`是否相交.doc`进行...

    计算机图形学的图形填充

    计算机图形学是信息技术领域的一个重要分支,主要研究如何在计算机中表示、生成和处理图形。在计算机图形学中,图形填充是一项基础且重要的任务,它用于为图形内部涂色,通常应用于图像处理、游戏开发、CAD设计等多...

Global site tag (gtag.js) - Google Analytics