12. 根据多边形求Π的值
题目描述:
我们可以根据中心点到正多边形顶点的距离r和正多边形的周长L来近似的计算Π,Π=L/(2 * r)。现在给你正多边形的边数(2的正整数次幂),输出对应正多边形计算后的Π值。C++代码,不可使用sin,cos等三角函数。
解题思路:
用正多边形逼近法求π的近似值。 用圆内接正多边形的边长和半径之间的关系,不断将边数翻倍并求出边长,重复这一过程,正多边形的边长就逐渐逼近圆的周长,只要圆内接正多边形的边数足够多,就可以求得所需精度的π值。 从正六边形开始。简单起见,设单位圆的半径是1,则单位圆的圆周长是2×π,设单位圆内接正i边形的边长为2b,边数加倍后正2i边形的边长为x,则:
代码:
#include <iostream>
#include <cmath>
using namespace std;
// 计算正多边形的周长
double calculatePerimeter(int n) {
double sideLength = 2.0; // 初始边长(正方形内接于单位圆)
for (int i = 4; i <= n; i *= 2) {
sideLength = sqrt(2 - sqrt(4 - sideLength * sideLength));
}
return n * sideLength / 2.0; // 每条边长而非直径划分
}
// 计算Π
double calculatePi(int n) {
double L = calculatePerimeter(n); // 计算周长
double r = 1.0; // 半径, 单位圆
return L / (2.0 * r); // Π = L/(2*r)
}
int main() {
int N;
cout << "Enter the number of sides (power of 2, at least 4): ";
cin >> N;
// Ensure that N is a power of 2 and at least 4
if ((N & (N - 1)) != 0 || N < 4) {
cout << "Error: Number of sides must be a power of 2 and at least 4." << endl;
return 1;
}
double pi = calculatePi(N);
cout << "Calculated Pi value for polygon with " << N << " sides: " << pi << endl;
return 0;
}