zoukankan      html  css  js  c++  java
  • 【计算几何】学习笔记

    基础操作

    判断A在线段BC上

        先判断BA与CA的叉积是否为零
        再判断A的横坐标是否在两点横坐标之间(否则在直线BC上而不一定在线段BC上)

    判断线段AB与线段CD是否相交 

        再判断C、D在线段AB两侧(AC叉积AB)*(AB叉积AD)>=0
        先判断A、B在线段CD两侧(同上)

    求线段AB与线段CD交点

        先判断是否有交点
        再用面积比计算(加权平均)(x1*s1+x2*s2)/(s1+s2)

    判断点在多边形内部

       引任意一条射线与多边形相交次数为奇数(注意与点、边的重合)
       点算上不算下
       线段不算

    求多边形面积

       任选一点顺序累加叉积

    凸包

    Graham

     极角排序(左下角开始(最左的最下)):

         计算出所有点到左下点的直线的角度大小(函数atan2)
            按照角度排序
            按顺序维护凸包

       水平序(左下角开始)(支持维护动态凸包):

            可以得到下凸壳
            可以反过来再求出上凸壳

    动态凸包

    加入点

           平衡树维护(基于水平序)

    删除

            CDQ分治or分块or二进制分组?

    平面最远点对

     求凸包再求旋转卡壳

    旋转卡壳

        枚举凸包上的所有边,对每一条边找出凸包上离该边最远的顶点
        计算这个顶点到该边两个端点的距离,并记录最大的值
        直观上这是一个O(n^2)的算法,和直接枚举任意两个顶点一样
        但是注意到当我们逆时针枚举边的时候,最远点的变化也是逆时针的
        这样就可以不用从头计算最远点,而可以紧接着上一次的最远点继续计算
        于是我们得到了O(n)的算法

    半平面交

        极角排序再去掉无用直线

    最小圆覆盖

    随机增量法

            对于i-1个点的最小圆覆盖,若i不在圆外,不管
            若i在圆外,i一定在i个点的最小圆覆盖上,以i和圆心建圆把i-1个点一次
            加入同理
            求出在i个点的最小圆覆盖上
            同理求出三个点,三点定圆

    圆的面积并

         辛普森积分

    题目

    poj2398
    poj3384
    poj2826
    bzoj2732
    bzoj2178

    Asteroids

  • 相关阅读:
    vue-router 子路由时,父级component设置
    解决vscode运行yarn提示错误
    Can't resolve 'readable-stream/transform.js' in
    mongoose聚合——$group
    mongoose聚合——$project
    ubuntu在apt update时出现错误: http://xx/ubuntu bionic InRelease 无法解析域名“xxx”
    使用ElasticSearch问题记录
    Err:1 http://mirrors.aliyun.com/ubuntu xenial InRelease Temporary failure ...问题及踩到的坑
    mongoose-exists检查一个数组的元素是否在集合中已存在
    jQuery插件开发之datalist
  • 原文地址:https://www.cnblogs.com/rir1715/p/8136091.html
Copyright © 2011-2022 走看看