美文网首页
二分法快速判断点是不是在凸多边形内

二分法快速判断点是不是在凸多边形内

作者: 梁间 | 来源:发表于2018-08-23 20:29 被阅读0次
    public func isInside(point:CGPoint, con:[CGPoint]) -> Bool{
        if con.count < 3 {
            return false
        }
        
        if multiply(sp: point, ep: con[1], op: con[0]) < 0{
            return false
        }
        
        if multiply(sp: point, ep: con[con.count-1], op: con[0]) < 0{
            return false
        }
        
        var i = 2
        var j = con.count - 1
        var line = -1
        while i <= j {
            let mid = (i+j)>>1
            if multiply(sp: point, ep: con[mid], op: con[0]) > 0{
                line = mid
                j = mid - 1
            }else{
                i = mid + 1
            }
        }
        return multiply(sp: point, ep: con[line], op: con[line-1]) < 0
    }
/*
 r=multiply(sp,ep,op),得到(sp-op)和(ep-op)的叉积
 r>0:ep在矢量opsp的逆时针方向;
 r=0:opspep三点共线;
 r<0:ep在矢量opsp的顺时针方向
 */
public func multiply(sp:CGPoint,ep:CGPoint,op:CGPoint) -> CGFloat{
    return (sp.x - op.x)*(ep.y - op.y) - (ep.x - op.x)*(sp.y - op.y)
}

相关文章

  • 二分法快速判断点是不是在凸多边形内

  • 二分法的多种编写

    二分法第一种 在[left,right]范围内寻找target 二分法第二种 在[left,right)范围内寻找...

  • java 快速排序的思想及解释说明

    快速排序在应用上很广泛,大家有知道二分法,二分法在排好序的数组中查找数据是最快的 快速排序是在无序的数组中排序、查...

  • 判断点是否在面内

    原文 https://blog.csdn.net/superdog007/article/details/5340...

  • Js调试

    断点和console.log区别 1 .断点可以更加快速的完成任务,相比于console.log.2 .可以在执行...

  • 从底层源码浅析Mybatis的SqlSessionFactory

    快速进入Debug跟踪 我们可以在此处打上断点,Debug模式启动进入断点,再按F7跟踪入其方法 源码分析准备 在...

  • alloc编译流程

    底层源码分析方法 1、添加符号断点去定位,找到定位方法,然后去源码内找 2、在代码断点处,按照control,点击...

  • 开发:调试篇

    调试:最行之有效的方法是预判;分析定位问题的最终点代码段,从这里追溯相关代码。 1.内存断点 F9开启当前行的断点...

  • fiddler中断方法

    1、在菜单栏中可以快速设置断点,但是缺点是所有会话内容都会应用该规则 2、通过命令设置断点: 1)、在请求开始时中...

  • 2018-11-26

    1、快速排序 2、冒泡 3、二分法 4、单例模式

网友评论

      本文标题:二分法快速判断点是不是在凸多边形内

      本文链接:https://www.haomeiwen.com/subject/qyamiftx.html