`
desert3
  • 浏览: 2159276 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

判断点在多边形内Javascript代码

阅读更多

<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gbk">  
<title>img usemap属性</title>  
</head>
<script>

function isPointInLine(point,linePoint1,linePoint2)
{
    //是否一个点向x轴的射线穿透线段,有交点
    var maxY=(linePoint1.y>linePoint2.y)?linePoint1.y:linePoint2.y;
    var minY=(linePoint1.y<linePoint2.y)?linePoint1.y:linePoint2.y;
    //alert("maxY" + maxY);
    //alert("minY = " + minY);
    var re=false;
    if(point.y<maxY && point.y>=minY)
    {
        a1 = point.x;
        a2 = (linePoint2.x-linePoint1.x)*(point.y-linePoint1.y)/(linePoint2.y-linePoint1.y);
        //alert(a1);
        //alert(a2);
        //alert(a1 <= a2);
        if(parseFloat(point.x) <= parseFloat(( linePoint1.x+(linePoint2.x-linePoint1.x)*(point.y-linePoint1.y)/(linePoint2.y-linePoint1.y) )) )
        {
        re=true;
        }
    }
    //alert("point :" + point.x + ":" + point.y + ";")
    //alert("linePoint1 :" + linePoint1.x + ":" + linePoint1.y + ";")
    //alert("linePoint2 :" + linePoint2.x + ":" + linePoint2.y + ";")
    //alert(re);
    return(re);
}

function isPointInPolygon(point,poly)
{
    //是否点在多边形里
    var crossNum=0;
    var re=true;
    for(var i=0;i<poly.length-1;i++)
    {
        if(isPointInLine(point,poly[i],poly[i+1]))
        {
            crossNum++;
        }
    }
    
    if((crossNum % 2)==0)
    {
        re=false;
    }
    
    return(re);
}

function clickme()
{
    var pa = document.getElementById("point").value.split(",");
    var p = {x:pa[0],y:pa[1]};
    
    var poa = document.getElementById("poly").value.split(",");
    var po = new Array();
    for(var i=0;i<poa.length/2;i++){
        po[i]={x:poa[2*i],y:poa[2*i+1]};
    };
    //for(var i=0;i<po.length;i++)
    //{
    //    alert(po[i].x);
    //    alert(po[i].y);
    //}

    //alert(p.x);
    //alert(p.y);

    alert(isPointInPolygon(p,po));
}
</script>
 
<body>
    原理:从要判断的点向x轴发射一条射线,如果射线与多边形的边有偶数次相交,那么点不在多边形内;奇数次相交,那么点在多边形内
    <br>
<input type="text" id="point" value="0.5,0.49" />点的横竖坐标,用逗号分隔
<br>
<input type="text" id="poly" value="0,0,0.75,0.75,1,0,1,1,0,1" />按照逆时针方向 多边形点的横竖坐标坐标0
<input type="button" id="btn" value="点击我" onclick="clickme();">
</body>
</html>

分享到:
评论

相关推荐

    判断点在多边形内算法javascript

    #### 一、判断点在多边形内的算法 在计算机图形学及相关的领域中,判断一个点是否位于一个多边形内部是一个常见的问题。本篇文章将介绍一种利用计算几何中的弧线法(即内角和法的一种变形)来实现这一功能的方法,...

    易语言判断点在多边形内外

    在图形处理和几何计算中,有时我们需要判断一个点是否位于多边形的内部或外部,这在计算机图形学中是一个常见的问题。这个“易语言判断点在多边形内外”的源码就是为了实现这个功能而编写的。 在计算机科学中,判断...

    js判断一个点是否在多边形内

    在JavaScript编程中,判断一个点是否位于一个多边形内部是一项常见的需求,尤其是在处理与图形界面相关的应用时。本文将详细介绍如何使用JavaScript来实现这一功能,并深入探讨背后的算法原理。 #### 一、问题背景 ...

    java判断百度地图的点是否在多边形区域内

    8. **交互式应用**:如果是在Web环境下,可能需要将这个功能整合到前端JavaScript中,通过API与后端Java服务进行交互,实现用户在地图上点击时实时判断点是否在多边形内。 通过理解以上知识点,并参考`Demo`文件中...

    js计算点是否在多边形范围内

    总结,JavaScript中判断点是否在多边形内的方法主要依赖于射线交叉数算法,它通过检查点与多边形边的交点数量来确定点的位置。为了提高代码质量,我们还需要编写全面的测试用例来验证函数的正确性。

    判断点是否在多边形内部-非常简单-多种言语通用

    知识点:判断点是否在多边形内部的算法及其在C#、Java、JavaScript中的实现 在计算机图形学、地理信息系统(GIS)以及游戏开发等领域,判断一个点是否位于一个多边形内部是一个常见的需求。该需求涉及到空间数据...

    JavaScript几何对象生成泰森多边形

    - **空间查询**:结合泰森多边形,可以进行点与多边形的关系查询,判断点是否位于特定的多边形内。 - **优化性能**:对于大量点数据,可能需要采用分块处理或异步计算来优化性能。 - **交互式操作**:用户可以动态...

    openlayers3 多边形相交判断

    两个多边形相交,意味着它们在二维平面上有共同的点。在几何学中,可以通过比较各个边来判断两个多边形是否相交。OpenLayers 3提供了`ol.geom.Polygon`类,用于创建和操作多边形对象。 1. **创建多边形**:在...

    多边形测试中的工业强度点_JavaScript_下载.zip

    多边形测试的目标是判断一个点P是否在多边形的边界内或边界上。这个问题有多种解决方法,如Winding Number法、Ray Casting法以及最近点查询法等。 Winding Number法基于点P到多边形所有边的相对顺序来计算环绕数,...

    在JavaScript中指向3D凸多边形内部

    在JavaScript中,处理3D图形和空间几何问题是一项挑战,特别是当涉及到判断点是否位于一个3D凸多边形内部时。这个问题在游戏开发、地理信息系统(GIS)以及虚拟现实应用中尤为常见。本文将详细讲解如何实现这样一个...

    基于高德地图扩展 线/面/圆 是否包含点

    对于"线/面/圆是否包含点"的问题,主要涉及到的是空间几何的包含关系判断,这在GIS领域中称为"点在区域内"或"点在多边形内"的问题。 对于`Polygon`(面)而言,判断一个点是否在多边形内部,常用的方法是射线法...

    Javascript 计算面与点图形包含关系

    要判断一个点是否在某个多边形内,有多种算法可供选择。 1. **射线交叉法(Ray Casting Algorithm)**:这是最常用的方法之一。从点出发画一条水平射线,统计这条射线与多边形边界相交的次数。如果次数是奇数,那么...

    自定义划分区域获取区域内坐标点-百度地图

    在JavaScript代码中,这通常涉及到`BMap.Circle`类的使用,通过传递中心点坐标和半径来创建一个圆形。 对于“长方形”,我们可以使用矩形工具,通过两个对角点坐标来定义一个矩形区域。这涉及到`BMap.Polygon`类的...

    php+mongodb判断坐标是否在指定多边形区域内的实例

    在本实例中,我们将探讨如何利用 PHP 和 MongoDB 来判断一个坐标点是否位于指定的多边形区域内。 首先,我们需要定义一个多边形区域。多边形是由多个坐标点(经度,纬度)构成的闭合路径。例如,给出的多边形区域是...

    openlayers3点选、框选、多边形选择demo

    在`mousedown`时记录起点坐标,在`mousemove`时更新矩形边界,然后在`mouseup`时遍历地图上的所有要素,判断它们是否完全在矩形内。这种方法适用于需要批量选择范围内的多个要素的情况。 3. **多边形选择(Polygon ...

    百度地图判断一个点是否在多边形内算法.doc

    百度地图提供的这个JavaScript实现是基于射线交叉法(Ray Casting Algorithm)来判断点是否在多边形内的。下面是详细的知识点解析: 1. **射线交叉法**: 射线交叉法是一种简单且效率较高的算法,它通过从测试点...

    js-intersect:多边形交集(JavaScript)

    index.js-用于绘制多边形和调用intersects()函数的代码 solution.js-具有intersect()函数和许多其他实现算法的函数的脚本 test.js-带有测试的脚本 index.css -index.html的样式 test.css -test.html的样式 如何...

    js+vml手绘多边形

    7. **Polygon.html文件**:这个文件很可能是项目的示例代码,它包含了一个简单的HTML页面,其中嵌入了JavaScript代码和VML元素,用户可以直接在浏览器中打开这个文件来体验手绘多边形的功能。 综上所述,"js+vml...

Global site tag (gtag.js) - Google Analytics