zoukankan      html  css  js  c++  java
  • 旋转卡壳

    算法流程:

    1:计算凸多边形y方向上的极值点,记为ymin,ymax。

    经过ymin,ymax作两条平行于x轴的水平线。这两点意见就是对踵点,计算它们的距离并维护最大值

    2:同时旋转两条直线,直至某一条线与多边形的一条边重合。

    此时产生了新的一对对踵点,计算新的距离并更新

    重复前两个步骤,直至重新回到ymin,ymax这对对踵点。

    输出最大直径(这里做适当改变就可以求最大面积等)

    //o(n)
    int dia_rotating_calipers(int n)
    {
        int i,q,dia=0;
        for(i=0,q=1;i<n;i++)
        {
            while(cross_product(stak[i],stak[i+1],stak[q+1])>cross_product(stak[i],stak[i+1],stak[q]))
            q=(q+1)%n;
            dia=max(dia,max(distance(stak[i],stak[q]),distance(stak[i+1],stak[q])));
        }
        return dia;
    }
    View Code
  • 相关阅读:
    c++语法(2)
    c++语法(1)
    前端之 BOM和DOM
    JavaScript
    CSS属性相关(续)
    CSS属性相关
    CSS选择器
    前端之CSS
    HTML常用标签
    HTML介绍
  • 原文地址:https://www.cnblogs.com/huzhenbo113/p/3278927.html
Copyright © 2011-2022 走看看