Даны два множества точек на плоскости. Найти центр и радиус окружности - C (СИ)
Формулировка задачи:
Даны два множества точек на плоскости. Найти центр и радиус окружности, проходящей через K (K >=3) точек первого множества и содержащий строго внутри себя М точек второго множества.
Кто может переделать программу? без typedef struct и inline
static, а на обычном, понятном СИ
#include <stdio.h> #include <math.h> // представление результата сруктурой typedef struct CIRCLE { double x; double y; double r; } circle; // вспомогательная функция, определитель специального вида inline static double det( double a1, double b1, double c1, double a2, double b2, double c2 ) { double d = (a1*a1+a2*a2)*b2 + (b1*b1+b2*b2)*c2 + (c1*c1+c2*c2)*a2; d -= (a1*a1+a2*a2)*c2 + (b1*b1+b2*b2)*a2 + (c1*c1+c2*c2)*b2; return d; } // длина отрезка inline static double norm(double x1, double y1, double x2, double y2) { double x = x1 - x2; double y = y1 - y2; return sqrt(x*x+y*y); } // вычисление описанной окружности circle circumscribed( double x1, double y1, double x2, double y2, double x3, double y3 ) { circle crcl; double a = norm(x1, y1, x2, y2); double b = norm(x1, y1, x3, y3); double c = norm(x3, y3, x2, y2); double Dinv = 0.5/(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)); crcl.r = a*b*c*fabs(Dinv); crcl.x = Dinv*det(x1, x2, x3, y1, y2, y3); crcl.y = -Dinv*det(y1, y2, y3, x1, x2, x3); return crcl; } int main() { double x1, y1; double x2, y2; double x3, y3; circle c; printf("Input x1 y1 x2 y2 x3 y3: "); scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3); c = circumscribed(x1, y1, x2, y2, x3, y3); printf("Center: (%g, %g)\n", c.x, c.y); printf("Radius: %g\n", c.r); return 0; }
программа работает.. кто поможет ее переделать,
готов оплатить работу
Решение задачи: «Даны два множества точек на плоскости. Найти центр и радиус окружности»
textual
Листинг программы
#include <stdio.h> #include <math.h> double gx; double gy; double gr; // вспомогательная функция, определитель специального вида double det( double a1, double b1, double c1, double a2, double b2, double c2 ) { return (a1*a1+a2*a2)*b2 + (b1*b1+b2*b2)*c2 + (c1*c1+c2*c2)*a2 - (a1*a1+a2*a2)*c2 - (b1*b1+b2*b2)*a2 - (c1*c1+c2*c2)*b2; } // длина отрезка double norm(double x1, double y1, double x2, double y2) { return sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1 - y2)); } // вычисление описанной окружности void circumscribed( double x1, double y1, double x2, double y2, double x3, double y3 ) { double Dinv = 0.5/(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)); gr = norm(x1, y1, x2, y2)*norm(x1, y1, x3, y3)*norm(x3, y3, x2, y2)*fabs(Dinv); gx = Dinv*det(x1, x2, x3, y1, y2, y3); gy = -Dinv*det(y1, y2, y3, x1, x2, x3); } int main() { double x1, y1; double x2, y2; double x3, y3; printf("Input x1 y1 x2 y2 x3 y3: "); scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3); circumscribed(x1, y1, x2, y2, x3, y3); printf("Center: (%g, %g)\n", gx, gy); printf("Radius: %g\n", gr); return 0; }
Объяснение кода листинга программы
- В начале кода объявлены переменные gx, gy, gr.
- Далее идут две функции: det и norm.
- Функция det вычисляет определитель матрицы 6х6.
- Функция norm вычисляет длину отрезка между двумя точками на плоскости.
- Функция circumscribed вычисляет центр и радиус окружности, которая проходит через три точки на плоскости.
- В функции main() с помощью scanf() считываются координаты трёх точек.
- Затем вызывается функция circumscribed(x1, y1, x2, y2, x3, y3), передавая координаты трёх точек.
- Результат работы функции: координаты центра и радиус описанной окружности, выводятся на экран с помощью printf().
- Код завершается возвратом 0 из функции main(), что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д