算法流程:
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; }