2

我试图根据 2 个百分比将一个圆圈分成 2 个段。类似于饼图,但使用单个垂直切片创建段。我找到了这个面积公式,但是当我知道半径和面积时,我无法求解 C(中心角):

(R(平方) / 2) * ( ((pi/180)* C) - sin(C) )

一旦我得到 CI,就可以使用 cos、tan 和 R(radius) 在圆上找到我的 x 和 y 点。

起初我以为我可以简单地乘以 180 * (smallerPercent / 50),但我意识到这是一个“不”。

4

2 回答 2

1

这是牛顿方法的一个很好的应用。下面的 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;
}
于 2013-07-10T03:13:35.370 回答
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) 以获得弧度。

于 2012-07-12T21:24:44.417 回答