11152. Разноцветные цветы

 

Имеется круглая клумба. На ее границе выбираются три точки. В полученный треугольник вписывается окружность. Клумба разбита на три части (желтая, фиолетовая и красная), в каждую из которых соответственно сажают подсолнечник, фиалки и розы. По заданным сторонам треугольника необходимо определить площадь клумбы, занимаемую соответственно подсолнечником, фиалками и розами.

Вход. Каждая строка содержит длины трех сторон треугольника a, b, c (0 < a £ b £ c £ 1000).

 

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

 

Пример входа

3 4 5

 

Пример выхода

13.6350 2.8584 3.1416

 

 

РЕШЕНИЕ

геометрия

 

Анализ алгоритма

По трем сторонам треугольника a, b, c вычислим его площадь, используя формулу Герона:

S = , где p =

Найдем радиусы большей и меньшей клумб, являющиеся соответственно радиусами описанной около и вписанной в исходный треугольник по формулам:

R = , r =

Площадь клумбы, занимаемой розами, равна .

Площадь клумбы, занимаемой фиалками, равна .

Площадь клумбы, занимаемой подсолнечником, равна .

 

Реализация алгоритма

Определим константу следующим образом:

 

#define PI acos(-1.0)

 

Читаем входные данные в действительные переменные a, b, c. Вычисляем площадь треугольника s по формуле Герона. Далее вычисляем площади, отведенные под подсолнечник, фиалки и розы по выше приведенным формулам соответственно в переменные yellow, violet, red.

 

  while(scanf("%lf %lf %lf",&a,&b,&c) == 3)

  {

    p = (a + b + c ) / 2;

    s = sqrt(p * (p-a) * (p-b) * (p-c));

    R = (a*b*c) / 4 / s;

    r = 2 * s / (a + b + c);

    red = PI * r * r;

    violet = s - red;

    yellow = PI * R * R - s;

    printf("%.4lf %.4lf %.4lf\n",yellow,violet,red);

  }