Взаимное расположение двух окружностей - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста! Нужно написать программу на Си, которая определяет взаимное расположение двух окружностей(выводит результат на экран) и, в случае их пересечения, рассчитывает и выводит площадь их пересечения. Пользователь вводит координаты центра х, у и радиус r. Также нужно учесть проверку на ноль и отрицательные числа в r.

Решение задачи: «Взаимное расположение двух окружностей»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main ()
{
 double x1, x2, y1, y2, r1, r2, d = 0, p1 = 0, p2 = 0, U1 = 0, U2 = 0, S1 = 0, S2 = 0;
 printf("Zadejte parametry kruznice #1\n");
 if (scanf("%lf%lf%lf", &x1, &y1, &r1) !=3 || r1<=0)
 {
                        printf("Nespravny vstup\n");
                        return 1;
                        }
 printf("Zadejte parametry kruznice #2\n");
 if (scanf("%lf%lf%lf", &x2, &y2, &r2) !=3 || r2<=0)
 {
                        printf("Nespravny vstup\n");
                        return 1;
                        }
 d = sqrt(x2*x2-2*x2*x1+x1*x1+y2*y2-2*y1*y2+y1*y1);
 p1 = 3.14 * r1 * r1;
 p2 = 3.14 * r2 * r2; 
 U1 = 2*acos((r1*r1 - r2*r2 + d*d)/2*r1*d);
 U2 = 2*acos((r2*r2 - r1*r1 + d*d)/2*r2*d);
 S1 = r1*r1(U1 - sin(U1))/2;
 S2 = r2*r2 (U2 -sin(U2))/2;
  
 if (r1==r2 && d==0)
printf("Kruznice splyvaji, prekryv: %lf.\n", p1);
 else if (d < fabs(r1-r2) && d > 0)
 printf("Kruznice #2 lezi uvnitr kruznice #1, prekryv: %lf.\n", p2); 
 
  else if (d == fabs(r1-r2))
  printf("Vnitrni dotyk, kruznice #2 lezi uvnitr kruznice #1, prekryv: %lf.\n", p2);
  
 else if (d > fabs(r1-r2) && d < (r1-r2))
  printf("Kruznice se protinaji, prekryv: %lf.\n", S1+S2);
  
 else if (d==(r1+r2))
  printf("Vnejsi dotyk, zadny prekryv.\n");
  
 else if (d > (r1+r2))
  printf("Kruznice lezi vne sebe, zadny prekryv.\n");
                        
 
system("PAUSE");
 
return 0;    
}

Объяснение кода листинга программы

  1. Объявление переменных: x1, x2, y1, y2, r1, r2, d, p1, p2, U1, U2, S1, S2.
  2. Ввод параметров первой окружности с помощью функции scanf.
  3. Проверка корректности ввода: если ввод некорректен, выводится сообщение об ошибке и программа завершается.
  4. Вычисление расстояния между центрами окружностей и его сохранение в переменной d.
  5. Вычисление площади первой окружности и сохранение ее в переменной p1.
  6. Вычисление площади второй окружности и сохранение ее в переменной p2.
  7. Вычисление углов между окружностями и сохранение их в переменных U1 и U2.
  8. Вычисление площади кольца между окружностями и сохранение ее в переменной S1.
  9. Вычисление площади кольца между окружностями и сохранение ее в переменной S2.
  10. Проверка условий взаимного расположения окружностей:
    • Если окружности совпадают, выводится сообщение о перекрытии и значение площади перекрытия.
    • Если окружность №2 лежит внутри окружности №1, выводится сообщение о перекрытии и значение площади перекрытия.
    • Если окружности касаются друг друга, выводится сообщение о перекрытии и значение площади перекрытия.
    • Если окружность №2 пересекает окружность №1, выводится сообщение о перекрытии и значение площади перекрытия.
    • Если окружность №2 лежит снаружи окружности №1, выводится сообщение о том, что окружности не пересекаются.
  11. Завершение работы программы с помощью функции system(PAUSE).
  12. Возврат значения 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.429 из 5
Похожие ответы