资讯专栏INFORMATION COLUMN

判断点击区域算法

MAX_zuo / 3037人阅读

摘要:上篇文章解决了四边形带旋转角度问题,耗费一天时间想到的解决算法。原来大神早就写好了算法,可以解决多边形点击区域判断。旋转方法判断点击区域是否在多边形范围内

上篇文章解决了四边形带旋转角度问题,耗费一天时间想到的解决算法。但是仅仅局限于四边形。
原来大神早就写好了算法,可以解决n多边形点击区域判断。
预用此算法,首先要保证多边形第一个点的x轴为最小值,也就是说先要给多边形各个点坐标做一个排序,找到x最小的点,放到第一个,其他点依次旋转。

旋转方法:

function sort(ele) {
    var min = 0,
        arr = [],
        len = ele.length;
    for(var n = 0; n < len; n++){
        if(ele[n][0] < ele[min][0]){
            min = n
        }
    }
    if(min != 0){
        for(var x = min; x < ele.length; x++){
            arr.push(ele[x]);
        }
        for(var y = 0; y < min; y++){
            arr.push(ele[y]);
        }
        return arr
    }
    return ele;
}
var bbox = [[4],[1],[2],[3]];
sort(bbox)//[[1],[2],[3],[4]]

判断点击区域是否在多边形范围内:

navi_utils.pointInPolygon = function (pos, polygon) {
    var inside = false;
    var polygonSize = polygon.length;
    var val1, val2;
    for(var i = 0; i < polygonSize; i++){
        var p1 = polygon[(i +  polygonSize)%polygonSize];
        var p2 = polygon[(i + 1 + polygonSize)%polygonSize];
        if(pos[1] < p2[1]){
            if(pos[1] >= p1[1]){
                val1 = (pos[1] - p1[1]) * (p2[0] - p1[0]);
                val2 = (pos[0] - p1[0]) * (p2[1] - p1[1]);
                if(val1 > val2){
                    inside = ! inside;
                }
            }
        }else if( pos[1] < p1[1]){
            val1 = (pos[1] - p1[1]) * (p2[0] - p1[0]);
            val2 = (pos[0] - p1[0]) * (p2[1] - p1[1]);
            if(val1 < val2){
                inside = ! inside;
            }
        }
    }
    return inside;
};

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/103119.html

相关文章

  • 判断用户点击是否在指定区域

    摘要:近日在地图开发中遇到需要高度显示指定区域的需求,图形画出来了,点击事件却成为一大难题,在中是没有点击事件的,只能通过点击区域来判断是否点击了对象本来如果是正正经经的矩形,判断点击也不是什么难事,偏偏地图就是带着倾斜角度这样就没办法简单的通过 近日在地图开发中遇到需要高度显示指定区域的需求,图形画出来了,点击事件却成为一大难题,在canvas中是没有dom点击事件的,只能通过点击区域来判...

    Enlightenment 评论0 收藏0
  • 美国的“大众点评网”Yelp如何利用深度学习对美食照片进行评分

    摘要:结果,我们当时非常抱以厚望的就是卷积神经网络模型,或者说是。单反相机可以让摄影师调节透镜类型和光圈大小,更好地控制把相片里的哪个部分作为焦点。更进一步,单反相机的传感器更大,对光线更敏感,即使在非常昏暗的环境下也可以拍出非常漂亮的相片。 Yelp的数据库中已经存储了几千万张相片,用户们现在每天都会上传大概十万张,而且速度还在不断加快。事实上,我们发现相片的上传增长率大于相片的查看率。这些相片...

    legendmohe 评论0 收藏0
  • 比人眼更精准,详解云识客双目活体检测技术

    摘要:双活体,依然是前最可靠的防攻击段之。详解云识客活体检测技术以下,我们分析一种多重人脸区域共享的深度学习算法。光流法辅助单目活体判断最后,针对单目活体,云识客也采用光流法辅助活体判断的校验机制。 以下这张照⽚,是真⼈实拍还是对着照⽚翻拍的? showImg(https://segmentfault.com/img/bVbuoHD); 如果告诉你,这张照⽚,是对着照⽚翻拍的照⽚,你会不会惊...

    whidy 评论0 收藏0
  • JAVA 垃圾收集器与内存分配策略

    摘要:引言垃圾收集技术并不是语言首创的,年诞生于的是第一门真正使用内存动态分配和垃圾收集技术的语言。垃圾收集器所关注的就是这部分内存。收集器是收集器的多线程版,它是第一款并发收集器。经常出现大对象会导致多次出发垃圾收集。 引言 垃圾收集技术并不是Java语言首创的,1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言。垃圾收集技术需要考虑的三个问题是: 哪些内存需...

    AlanKeene 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<