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

  • 相关阅读:
    WPF and SL RadioButtonList Tip
    Prism V2之旅(1)
    wpf开发常见问题(1)
    (转)英语学习者的十句经典名言
    json格式化,统一格式?,前端与后端的矛盾
    路由器默认地址跟帐号密码
    ASP操作XML数据小结
    系统封装工具和常用软件下载(2009年10月更新的)
    全国邮编、区号数据、IP数据库
    Linux 包管理速查表
  • 原文地址:https://www.cnblogs.com/rir1715/p/8136091.html
Copyright © 2011-2022 走看看