Даны два множества точек на плоскости. Найти центр и радиус окружности - 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;
}

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

  1. В начале кода объявлены переменные gx, gy, gr.
  2. Далее идут две функции: det и norm.
  3. Функция det вычисляет определитель матрицы 6х6.
  4. Функция norm вычисляет длину отрезка между двумя точками на плоскости.
  5. Функция circumscribed вычисляет центр и радиус окружности, которая проходит через три точки на плоскости.
  6. В функции main() с помощью scanf() считываются координаты трёх точек.
  7. Затем вызывается функция circumscribed(x1, y1, x2, y2, x3, y3), передавая координаты трёх точек.
  8. Результат работы функции: координаты центра и радиус описанной окружности, выводятся на экран с помощью printf().
  9. Код завершается возвратом 0 из функции main(), что означает успешное выполнение программы.

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


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

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

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