Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.74
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
#1

Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек - C++

29.06.2011, 15:22. Просмотров 5881. Ответов 56

Надо написать программу на СИ, определяюшую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек на плоскости и содержащей внутри наибольшее количество точек этого множества. Помогите пожалуйста!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 15:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек (C++):

Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек - C++
Определить радиус и центр окружности, проходящей, по крайней мере, через три различные точки заданного множества точек на плоскости и,...

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

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

Найдите центр и радиус окружности, проходящей через три заданные точки на плоскости. - C++
Народ!! Помогите, пожалуйста, решить задачу Найдите центр и радиус окружности, проходящей через три заданные точки на плоскости.

Из заданного на плоскости множества точек выбрать три различные точки - C++
Здравствуйте, помогите пожалуйста написать программу: Из заданного на плоскости множества точек выбрать три различные точки так, чтобы...

Из заданного на плоскости множества точек выбрать три различные точки - C++
Само задание звучит так: "Из заданного на плоскости множества точек выбрать три различные точки так, чтобы разность между площадью...

56
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.06.2011, 15:26 #2
задача специфическая, и там где вы учитесь наверняка решали подобные задачи, представте нам свои соображения
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:32  [ТС] #3
К сожалению, ничего подобного мы не решали((( знаю только, что по этим трем точкам нужен треугольник, надо провести серединные перпендикуляры, провести окружность и определить радиус и центр...про остальное вообще не знаю...

я не представляю как это реализовать в программе...
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
29.06.2011, 15:46 #4
втупую перебери все окружности, проходящие через три точки, другого способа скорее всего и нету
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:56  [ТС] #5
а кто-нибудь может написать эту программу?
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
29.06.2011, 15:59 #6
да наверно много кто может, только зачем?
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 16:01  [ТС] #7
Мне это очень необходимо, сама я не могу написать ее... Надеюсь, что мне кто-нибудь поможет...
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
29.06.2011, 16:18 #8
Цитата Сообщение от Protected_fleur Посмотреть сообщение
сама я не могу написать ее
по какой причине? если не знаешь языка то иди во фриланс
если знаешь то начни, а дальше посмотрим, говори чё именно не понятно, если это не касается синтаксиса С или аналитической геометрии
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
29.06.2011, 17:23 #9
Программа вычисляющая координаты центра и радиус окружности, описанной вокруг треугольника. Проверки треугольника на нулевую площадь нет. Формулы получены гибридизацией английской и русской страниц википедии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <cmath>
 
using namespace std;
 
// представление результата сруктурой с инициализатором
struct circle
{
    double x;
    double y;
    double r;
    circle() : x(0), y(0), r(0) {}
    circle(double x0, double y0, double radius) : x(x0), y(y0), r(radius) {}
};
 
// вспомогательная функция, определитель специального вида
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 circumscr<F12>ibed(
        double x1, double y1,
        double x2, double y2,
        double x3, double y3 )
{
    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));
    double r = a*b*c*fabs(Dinv);
    double x0 =  Dinv*det(x1, x2, x3, y1, y2, y3);
    double y0 = -Dinv*det(y1, y2, y3, x1, x2, x3);
    return circle(x0, y0, r);
}
 
int main()
{
    double x1, y1;
    double x2, y2;
    double x3, y3;
 
    cout << "Input x1 y1 x2 y2 x3 y3: ";
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
 
    circle c = circumscribed(x1, y1, x2, y2, x3, y3);
    cout << "Center: (" << c.x << ", " << c.y << ")\n";
    cout << "Radius: " << c.r << endl;
 
    return 0;
}
Ещё что-то есть здесь: Окружности и треугольник!. Не проверял.

Ну а перебор, это уж пусть кто-то другой. Или сама
2
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 19:10  [ТС] #10
Спасибо большое))) попробую теперь разобраться и дописать)))

Добавлено через 28 минут
Жаль, что не на СИ...
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
29.06.2011, 20:16 #11
Чёрт, когда это <F12> пролезла в название функции?
Ну а сами функции вычислительные практически на Си, отличий не много там. Но раз уж ошибка вкралась, то вот на Си вариант.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#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;
}
Добавлено через 54 секунды
Да, inline для Си тоже может стать неожиданностью. Тогда их просто убрать надо будет.
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 20:59  [ТС] #12
блин((( что-то у меня после ввода точек вылетает...
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
29.06.2011, 22:06 #13
Вылетает, или закрывается?
создаю исполняемый файл запускаю окно появляется на доли секунды и изчезает
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
30.06.2011, 05:40 #14
Добавь внизу функции main()
system("pause");
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
01.07.2011, 14:04 #15
Вместо моей функции norm можно использовать стандартную hypot. Вот блин, память подвела, пришлось велосипед изобретать.
Как же я про тебя забыл? Ⓒ
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2011, 14:04
Привет! Вот еще темы с ответами:

Работа С Массивами (Выбрать три различные точки из заданного множества точек на плоскости так...) - C++
Задание: Выбрать три различные точки из заданного множества точек на плоскости так, чтобы была минимальной разность между количествами...

Написать программу, определяющую наклон прямой, проходящей через две заданные точки - C++
пожалуйста помогите с составлением кода 5.Напишите программу, которая после получения значений координат двух точек на плоскости ...

Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек) - C++
есть программа, проблема в передаче массива в функцию a #include &quot;stdio.h&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; #include...

Из заданного множества точек на плоскости выбрать две различные точки - C++
Из заданного множества точек на плоскости выбрать две различные точки так, что бы количества точек, лежащих по разные стороны прямой,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
01.07.2011, 14:04
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru