我试图根据 2 个百分比将一个圆圈分成 2 个段。类似于饼图,但使用单个垂直切片创建段。我找到了这个面积公式,但是当我知道半径和面积时,我无法求解 C(中心角):
(R(平方) / 2) * ( ((pi/180)* C) - sin(C) )
一旦我得到 CI,就可以使用 cos、tan 和 R(radius) 在圆上找到我的 x 和 y 点。
起初我以为我可以简单地乘以 180 * (smallerPercent / 50),但我意识到这是一个“不”。
我试图根据 2 个百分比将一个圆圈分成 2 个段。类似于饼图,但使用单个垂直切片创建段。我找到了这个面积公式,但是当我知道半径和面积时,我无法求解 C(中心角):
(R(平方) / 2) * ( ((pi/180)* C) - sin(C) )
一旦我得到 CI,就可以使用 cos、tan 和 R(radius) 在圆上找到我的 x 和 y 点。
起初我以为我可以简单地乘以 180 * (smallerPercent / 50),但我意识到这是一个“不”。
这是牛顿方法的一个很好的应用。下面的 C 程序可以很容易地修改来解决这个问题。您可以更改它以计算所需面积占圆面积的百分比,或单独计算所需面积并输入。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double chordangle(double r,double a)
{
double x = a/2.0;
do{
x = ((x * r * r / M_PI) - (sin(x) * r * r / 2.0) - a ) /
(r * r / M_PI - (r * r / 2.0) * cos(x));
}while(((x * r * r / M_PI) - (sin(x) * r * r / 2.0 ) - a) > 1e-11);
return x;
}
int main()
{
double a,r;
printf("Enter radius: ");
if(scanf("%lf",&r)!=1)
{
printf("You must enter a number.\n");
exit(1);
}
printf("Enter desired area of slice: ");
if(scanf("%lf",&a)!=1)
{
printf("You must enter a number.\n");
exit(1);
}
printf("The angle in radians is %lf.\n",chordangle(r,a));
printf("The angle in degrees is %lf.\n",chordangle(r,a)*180.0/M_PI);
return 0;
}
我已经更新了这个答案(原文在最底部)。
您已经知道圆的半径、面积(PI * r 平方)和您尝试构建的线段面积(smallerPercentage / 100 * areaOfCircle)。
如果我正确理解了这个问题,没有公式可以计算出创建给定区域和半径的线段所需的角度。
然而,一切都没有丢失。
如果您知道角度,您还可以使用已有的公式计算出该区域。A = 0.5 * r 平方 * ( ((PI/180) * Θ) - sin(Θ)) 其中 Θ 是角度。
因此,唯一的解决方案是开始对 Θ 进行有条理的猜测,看看计算出的面积是否与您的预期相符(在一定的公差范围内)。
并且假设百分比将小于 50(并且大于 0),则:0 < 角度 < 180。
所以,我第一次猜测是 90 度。如果面积太大,请再次猜测 45,太小尝试 135。每次将大小减半,并从前一个角度加上或减去它。继续缩小范围,直到您获得的区域在您期望的区域的容差范围内。少于 10 次的猜测应该会让你到达那里。
我认为这被称为“1/4 Tank 量油尺问题”:参见: http: //mathforum.org/library/drmath/view/61752.html
我希望这有帮助。
在我正确理解您要做什么之前,这是我的原始答案:
我不确定我是否完全理解你想要达到的目标,但你可以像这样计算出你想要的角度(以度为单位):
smallAngle = 360/100 * smallerPercentage;
largeAngle = 360 - smallAngle;
您可以随时将度数乘以 (PI/180) 以获得弧度。