计算几何——cf1354c2

这么清新脱俗的几何爱了

由于n必定是奇数,所以2*n正多边形一定是可以上下对半分,且上下有一个最高/低的三角形

限制正方形长度的必定是多边形左右宽度和上下高度,当这两个宽度相同时,正方形边长最小

所以二分多边形转过的角度来算即可

纯手算,推下公式就行

#include<bits/stdc++.h>
using namespace std;
#define db double

const db eps = 1e-8;
const db pi = acos(-1.0);

int n;
db l,delta,h;

int  main(){
    int t;cin>>t;
    while(t--){
        cin>>n;int m=n/2;
        delta=pi/n;
        l=0.5/sin(0.5*delta);
        h=l*cos(0.5*delta);
        
        db L=0,R=pi/n*0.5,mid,ans;
        while(R-L>=eps){
            mid=(L+R)/2;
             db f1=l*cos(mid);
             db f2=l*sin(mid+m*pi/n);
             if(f1<f2)R=mid;
            else L=mid;
        }
        ans=l*cos(L);
        printf("%.6lf\n",ans*2);
    }
}

 

posted on 2020-05-19 15:15  zsben  阅读(98)  评论(0编辑  收藏  举报

导航