题目意思:用n个外圆将半径为r的內圆包围起来,使得彼此之间能够相切,问外圆的半径为多少?
解题思路:这是一道几何题,我们需要引入辅助线
我们设外圆的半径为R 我们可以得到左边(左右其实都一样)那个等腰三角形三角形的斜边长度为R+r,底边为R。又因为的所有圆心连接起来就是一个正多边形,我们知道多边形 内角和为:π*(n-2)(这里外面小圆有多少个,n就为多少,这个可以在草稿本上画一下)。很明显,n个球可以分割成n个这样的等腰三角形。 然后一个底角的角度为π*(n-2)/n/2;现在我们可以根据余弦公式得到:R/(R+r)=cos(a);这样就可以推出R:R=R=r*cos(a)/(1-cos(a));
AC代码
#include<bits/stdc++.h>
using namespace std
;
int main(){
double n
, r
;
cin
>> n
>> r
;
double a
= acos(-1) * (n
-2) / n
/ 2;
printf("%.7lf\n",r
* cos(a
) / (1-cos(a
)));
return 0;
}