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

  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/rir1715/p/8136091.html
Copyright © 2011-2022 走看看