Пожалуйста подождите

Есть хорошие программисты тут?

21 января 19:43
Рейтинг +00 - +    Эмоции
комментариев: 19
Народ!!! Помогите!! Очень очень надо!!!

Определить радиус и центр такой окружности, проходящей хотя бы через 3 точки заданного множества точек на плоскости, что минимальна разность количеств точек лежащих внутри и вне окружности

Есть структура задающая уравнение окружности, проходящей через 3 точки...
Нужно только воткнуть правильно.... И дописать...

#define EPSILON 10E-5

typedef struct {
float x;
float y;
} dot;

int getCircleEquation(dot dot1, dot dot2, dot dot3, float *x0, float *y0, float *r)
{
float det = (dot1.x * dot2.y + dot2.x * dot3.y + dot3.x * dot1.y
- dot1.x * dot3.y - dot2.x * dot1.y - dot3.x * dot2.y);
if (fabs(det) < EPSILON)
{
// Три точки на одной прямой, нельзя построить окружность
return 0;
}

// Вычисляем ординату центра
*y0 = (dot2.x * dot3.x * dot3.x - dot3.x * dot2.x * dot2.x +
dot1.x * dot1.x * dot3.x - dot1.x * dot3.x * dot3.x +
dot1.x * dot2.x * dot2.x - dot2.x * dot1.x * dot1.x +

dot2.x * dot3.y * dot3.y - dot1.x * dot3.y * dot3.y +
dot1.x * dot2.y * dot2.y - dot2.x * dot1.y * dot1.y +
dot3.x * dot1.y * dot1.y - dot3.x * dot2.y * dot2.y) / (2 * det);

// Вычисляем абциссу центра
if (fabs(dot1.x - dot2.x) < EPSILON)
{
*x0 = (dot3.x * dot3.x + dot3.y * dot3.y
- dot2.x * dot2.x - dot2.y * dot2.y
+ 2 * *y0 * dot2.y
- 2 * *y0 * dot3.y) / (2 * (dot3.x - dot2.x));
} else {
*x0 = (dot2.x * dot2.x + dot2.y * dot2.y
- dot1.x * dot1.x - dot1.y * dot1.y
+ 2 * *y0 * dot1.y
- 2 * *y0 * dot2.y) / (2 * (dot2.x - dot1.x));
}

// Вычисляем радиус
*r = sqrt(pow(dot1.x - *x0, 2) + pow(dot1.y - *y0, 2));

// Получили уравнение окружности
return 1;
}
Метки меток нет

комментарии

К первому непрочитанному 
  • 21 января 2009 | 20:01 (ссылка #468496)
    0 - + Сообщить модератору
    mixnsk
    Тыж фпмишнег, программист. давай думай думай. Если честно не понял что ты хочешь о_О
  • 21 января 2009 | 20:03 (ссылка #468504)
    0 - + Сообщить модератору
    аватара
    Ну это мне не по силам... Задание наверху. Выложенная структура окружность задаёт. Надо теперь написать код чтоб задание выполнить в нужных местах втыкая данную структуру
  • 21 января 2009 | 20:10 (ссылка #468499)
    0 - + Сообщить модератору
    Цитата:
    минимальна разность количеств точек лежащих внутри и вне окружности
    Это значит, что должны быть равны площади круга и поверхности(ограничена должна быть). по радиусу вычислить площадь надо... ну и дальше плясать))
  • 21 января 2009 | 20:14 (ссылка #468505)
    0 - + Сообщить модератору
    аватара
    Не понял... почему так?
  • 21 января 2009 | 20:18 (ссылка #468500)
    0 - + Сообщить модератору
    количество точек - бесконечно. значит надо сравнивать площади. наверно.
  • 21 января 2009 | 20:34 (ссылка #468506)
    0 - + Сообщить модератору
    аватара
    Точки ты сам задаёш...
  • 21 января 2009 | 20:43 (ссылка #468497)
    0 - + Сообщить модератору
    mixnsk
    Цитата:
    Точки ты сам задаёш...
    ты сам себе противоречишь))
    Цитата:
    проходящей хотя бы через 3 точки заданного множества
  • 21 января 2009 | 20:47 (ссылка #468507)
    0 - + Сообщить модератору
    аватара
    Заданного множества! Вот именно, ты задаёшь дофига точек, и для каждых трёх любых точек рисуется круг и вычисляется количество внутри и вне
  • 21 января 2009 | 20:52 (ссылка #468502)
    0 - + Сообщить модератору
    ФПМИ жжет%)...
  • 21 января 2009 | 21:09 (ссылка #468493)
    0 - + Сообщить модератору
    Аватара не загружена
    #include <stdio.h> #include <math.h> #define EPSILON 10E-5 typedef struct { float x; float y; } dot; int main() { dot dot1, dot2, dot3; float x0,y0,r; int result; dot1.x=5; dot1.y=6; dot2.x=1; dot2.y=7; dot3.x=11; dot3.y=2; result=getCircleEquation(dot1,dot2,dot3,&x0,&y0,& ;r); if(result == 0) { printf("The all 3 points located on one linen"); } else { printf("Results:nx0 = %fny0 = %fnR = %fn",x0,y0,r); } } int getCircleEquation(dot dot1, dot dot2, dot dot3, float *x0, float *y0, float *r) { float det = (dot1.x * dot2.y + dot2.x * dot3.y + dot3.x * dot1.y - dot1.x * dot3.y - dot2.x * dot1.y - dot3.x * dot2.y); if (fabs(det) < EPSILON) { // Три точки на одной прямой, нельзя построить окружность return 0; } // Вычисляем ординату центра * y0 = (dot2.x * dot3.x * dot3.x - dot3.x * dot2.x * dot2.x + dot1.x * dot1.x * dot3.x - dot1.x * dot3.x * dot3.x + dot1.x * dot2.x * dot2.x - dot2.x * dot1.x * dot1.x + dot2.x * dot3.y * dot3.y - dot1.x * dot3.y * dot3.y + dot1.x * dot2.y * dot2.y - dot2.x * dot1.y * dot1.y + dot3.x * dot1.y * dot1.y - dot3.x * dot2.y * dot2.y) / (2 * det); // Вычисляем абциссу центра if (fabs(dot1.x - dot2.x) < EPSILON) { *x0 = (dot3.x * dot3.x + dot3.y * dot3.y - dot2.x * dot2.x - dot2.y * dot2.y + 2 * *y0 * dot2.y - 2 * *y0 * dot3.y) / (2 * (dot3.x - dot2.x)); } else { *x0 = (dot2.x * dot2.x + dot2.y * dot2.y - dot1.x * dot1.x - dot1.y * dot1.y + 2 * *y0 * dot1.y - 2 * *y0 * dot2.y) / (2 * (dot2.x - dot1.x)); } // Вычисляем радиус *r = sqrt(pow(dot1.x - *x0, 2) + pow(dot1.y - *y0, 2)); // Получили уравнение окружности return 1; }
  • 21 января 2009 | 21:10 (ссылка #468494)
    0 - + Сообщить модератору
    Аватара не загружена
    Если функция верная, то работает правильно. Results: x0 = -1.000000 y0 = -9.500000 R = 16.620770 Для этих трех точек
  • 21 января 2009 | 21:14 (ссылка #468508)
    0 - + Сообщить модератору
    аватара
    Прога написана без ошибок но ничего не делает Во первых, я так понимаю что отсутсвует оператор ввода впринципе... как точки то ввводить? И во вторых
    Цитата:
    dot1.x=5; dot1.y=6; dot2.x=1; dot2.y=7; dot3.x=11; dot3.y=2;
    почему они изначально заданы?
  • 21 января 2009 | 21:15 (ссылка #468509)
    0 - + Сообщить модератору
    аватара
    забил код в вижал студиу - даже окно кмдшное не открывается, ибо исполнять нечего
  • 21 января 2009 | 21:22 (ссылка #468495)
    0 - + Сообщить модератору
    Аватара не загружена
    Слушай, друг, я тебе написал. Точки заданы вручную, хочешь переделать - переделай. Исполняется оно точно. Я писал под линуксом. Вот скрин. Кстати - не за что.
  • 21 января 2009 | 21:25 (ссылка #468510)
    0 - + Сообщить модератору
    аватара
    ну ладно, хоть что то, спасибо и на том...
  • 21 января 2009 | 21:47 (ссылка #468498)
    0 - + Сообщить модератору
    Феникс
    Мне становится стыдно за фпми =( Раньше,даже самые "худые" студенты хотя бы умели разбираться в программах написанных кем-то и знали основы Си и плюсов. Правильно говорит Борис Юрьевич, что из года в год студенты деградируют.. что же будет дальше?!?!
  • 21 января 2009 | 22:09 (ссылка #468511)
    0 - + Сообщить модератору
    аватара
    Во первых в готовом коде я разбираюсь... во вторых с нашим преподом, который ни разу ничего вообще толком не обьяснил и принимает как верные абсолютно нерабочие программы нормально обучиться программированию невозможно я считаю...
  • 21 января 2009 | 22:27 (ссылка #468503)
    0 - + Сообщить модератору
    аватара
    Да здравствет любимый РЭФ=)))
  • 22 января 2009 | 02:38 (ссылка #468501)
    0 - + Сообщить модератору
    аватара
    хочешь чему-то научиться - учись этому сам..
  • Подписаться