这么清新脱俗的几何爱了
由于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 ",ans*2); } }