Нахождение центрального угла по площади сегмента круга

Я пытаюсь разделить круг на 2 сегмента на основе 2 процентов. Как круговая диаграмма, но создание сегментов с одним вертикальным срезом. Я нашел эту формулу для площади, но не смог решить для C (центральный угол), когда я знаю радиус и площадь:

(R(квадрат)/2) * (((pi/180)* C) - sin(C))

Получив C, я могу использовать cos, tan и R(радиус), чтобы найти точки x и y на окружности.

Сначала я думал, что могу просто умножить 180 * (smallerPercent / 50), но понял, что это «нет».


person Sean    schedule 12.07.2012    source источник


Ответы (2)


Это хорошее приложение для метода Ньютона. Следующая программа на 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;
}
person Pyeatt    schedule 10.07.2013

Я обновил этот ответ (оригинал находится в самом низу).

Вы уже знаете радиус круга, его площадь (PI * r в квадрате) и площадь сегмента, который вы пытаетесь построить (smallerPercentage / 100 * areaOfCircle).

Если я правильно понимаю задачу, то формулы для вычисления угла, необходимого для создания сегмента заданной площади и радиуса, не существует.

введите здесь описание изображения

Однако не все потеряно.

Если бы вы знали угол, вы могли бы также определить площадь с помощью формулы, которая у вас уже есть. A = 0,5 * r в квадрате * (((PI/180) * Θ) - sin(Θ)) где Θ — угол.

Таким образом, единственное решение состоит в том, чтобы начать делать методические предположения о Θ и посмотреть, соответствует ли рассчитанная площадь тому, что вы ожидаете (в пределах определенного допуска).

А учитывая, что процент будет меньше 50 (и больше 0), то: 0 ‹ угол ‹ 180.

Итак, я бы сделал свое первое предположение на 90 градусов. Если область слишком велика, попробуйте еще раз 45, если слишком мала, попробуйте 135. Продолжайте уменьшать размер вдвое каждый раз и добавляйте или вычитайте его из предыдущего угла. Продолжайте сужать его, пока не получите область, которая находится в пределах допуска ожидаемой области. Менее 10 догадок должны привести вас туда.

Я думаю, что это называется «проблема со щупом 1/4 бака»: см.: http://mathforum.org/library/drmath/view/61752.html

Надеюсь, это поможет.


Это был мой первоначальный ответ, прежде чем я правильно понял, что вы пытались сделать:

Я не уверен, что полностью понимаю, чего вы пытаетесь достичь, но вы можете определить нужные углы (в градусах) следующим образом:

smallAngle = 360/100 * smallerPercentage;
largeAngle = 360 - smallAngle;

И вы всегда можете умножить градусы на (PI/180), чтобы получить радианы.

person AW101    schedule 12.07.2012
comment
Это то, что можно было бы использовать для стандартной круговой диаграммы, но я думаю, что user1521972 ищет один вертикальный срез (не обязательно через центр), дающий требуемые проценты в каждой из двух частей. - person Jim Lewis; 13.07.2012
comment
Вот онлайн-калькулятор, который может помочь: handymath.com/cgi-bin /arc18.cgi?submit=Запись - person AW101; 13.07.2012