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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.74
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
29.06.2011, 15:22     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #1
Надо написать программу на СИ, определяюшую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек на плоскости и содержащей внутри наибольшее количество точек этого множества. Помогите пожалуйста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 15:22     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Посмотрите здесь:

C++ Из заданного на плоскости множества точек выбрать три различные точки
Найдите центр и радиус окружности, проходящей через три заданные точки на плоскости. C++
C++ Найти минимальный радиус шара, который будет охватывать все заданные точки(центр окружности лежит на одной из заданных точек)
Работа С Массивами (Выбрать три различные точки из заданного множества точек на плоскости так...) C++
C++ Определить радиус и центр окружности минимального радиуса, проходящей хотя бы через три различные точки заданного множества точек на плоскости
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 17:57  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #21
Цитата Сообщение от grizlik78 Посмотреть сообщение
они ж близнецы практически
ну не знаю... не особо уж близнецы... все это для меня сплошной кошмар на pascal...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 18:58  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #22
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;
}

а можно в этой программе сделать так, чтоб она считала по любым трем точкам из заданного множества? как это сделать?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 19:04     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #23
В строке 59 вызывать функцию с координатами любых 3 точек. Разумеется функцию main() надо переписывать заново.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:13  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #24
Как вызвать эту функцию для любых трех точек???
насколько я понимаю, надо взять цикл...
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:15  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #25
например,
for (i=1; i<n; i++)
{
c = ... а тут как задать?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 19:17     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #26

Если удобнее работать с точками как единым целым, а не с координатами по отдельности, то можно создать структуру для точки. Ну и интерфейс функции изменить тогда.
А в цикле, если я правильно понимаю, надо перебрать все возможные сочетания по 3 точки.

Добавлено через 58 секунд
Цитата Сообщение от Protected_fleur Посмотреть сообщение
c = ... а тут как задать?
Сначало сами точки нужны, чтобы их можно было хоть как-то использовать. Как точки хранятся?
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:27  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #27
Вот я начала переделывать main ...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main() {
        int i, j, n;
        circle c;
        
        printf("Enter number points( n>2 ): ");
        scanf("%d", &n);
        if(n<=2) { 
        printf("Number points is little");  
        _getch();
        return 0;  }
 
        float ** Points = new  float* [n];
        for (i=0; i<n; i++)
        {
                Points[i]= new float [2];
                printf("Enter pair[%d]:\n x: ", i + 1); 
                scanf("%f", &Points[i][X]);
                printf("y: ");              
                scanf("%f", &Points[i][Y]); }
                
                for (i=1; i<n; i++)
        {               
                        c =
Добавлено через 38 секунд
т.е ввожу их сама...

Добавлено через 8 минут
А как вызвать функцию для этих точек не знаю....
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 19:34     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #28
Ну, раз точки массивами, то не Points[i][X], а Points[i][0], ну и с [Y] так же, [1]
Примерно как в паскалевской:
C
1
2
3
4
5
6
7
8
9
for (i=0; i<n-2; i++)
  for (j=i+1; j<n-1; j++)
    for (k=j+1; k<n; k++)
    {
      c = circumscribed(
              Points[i][0], Points[i][1],
              Points[j][0], Points[j][1],
              Points[k][0], Points[k][1] );
    }
Добавлено через 5 минут
Только это... Поскольку очередные 3 точки запросто могут оказаться на одной прямой, то проверка на это дело всё-таки нужна. Я уже говорил, что в моей функции проверка отсутствует, в этом случае получится деление на 0.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:35  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #29
А как сделать проверку?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 19:41     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #30
Проверять, не равна ли нулю площадь треугольника. То есть если (x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)) по модулю близко к 0, то переходить к следующему набору точек (например с помощью continue).
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:45  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #31
спасибо)))
у меня есть еще вопрос: как сделать, чтоб эта окружность содержала внутри наибольшее количество точек заданного множества??? нужно вроде подсчитать точки внутри и снаружи...но как это сделать???
подскажите пожалуйста
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 19:48     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #32
Перебрать все точки, да посчитать, сколько их внутри
Точка (x,y) лежит внутри окружности (x0,y0,R), если (x-x0)²+(y-y0)² < R²
При равенстве точка лежит на окружности. Я бы тоже отнёс ко внутренним для данной задачи.
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:49  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #33
точно... Спасибо большое
мне аж жить хочется когда начинаю понимать...
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 21:15  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #34
понять-то поняла... а как это реализовать?
как сделать, чтоб происходил перебор всех точек, после того как получили окружность?
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
int main() {
        int i, j, n, k;
        circle c;
        
        printf("Enter number points( n>2 ): ");
        scanf("%d", &n);
        if(n<=2) { 
        printf("Number points is little");  
        _getch();
        return 0;  }
 
        float ** Points = new  float* [n];
        for (i=0; i<n; i++)
        {
                Points[i]= new float [2];
                printf("Enter pair[%d]:\n x: ", i + 1); 
                scanf("%f", &Points[i][0]);
                printf("y: ");              
                scanf("%f", &Points[i][1]); }
                
        for (i=0; i<n-2; i++)
        for (j=i+1; j<n-1; j++)
        for (k=j+1; k<n; k++)  {
            c = cir(
              Points[i][0], Points[i][1],
              Points[j][0], Points[j][1],
              Points[k][0], Points[k][1] );  }
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 21:18  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #35
как задать этот цикл перебора?
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 21:24     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #36
C
1
2
3
for (m=0; m<n; m++)
{
}
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 21:27  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #37
неет...ну это то понятно... я не знаю, как использовать точку центра, вычисленной окружности, когда перебираю точки...как этот цикл засунуть сюда???
C
1
2
3
4
5
6
7
for (i=0; i<n-2; i++)
        for (j=i+1; j<n-1; j++)
        for (k=j+1; k<n; k++)  {
            c = cir(
              Points[i][0], Points[i][1],
              Points[j][0], Points[j][1],
              Points[k][0], Points[k][1] );  }
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
02.07.2011, 21:33     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #38
Что стало с моими ровненькими отступами?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for (i=0; i<n-2; i++)
  for (j=i+1; j<n-1; j++)
    for (k=j+1; k<n; k++)
    {
      c = circumscribed(
              Points[i][0], Points[i][1],
              Points[j][0], Points[j][1],
              Points[k][0], Points[k][1] );
      for (m=0; m<n; m++)
      {
        // на самом деле сравнивать надо не гипотенузу и радиус,
        // а сумму квадратов разностей и квадрат радиуса, но мне лень :)
        if (hypot(Points[m][0]-c.x, Points[m][1]-c.y) <= c.r)
        {
          // внутри
        }
        else
        {
          // снаружи
        }
      }
    }
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 21:40  [ТС]     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек #39
а ну насчет отступов это да...проблема препод вечно ворчит блин, ну мне так удобно...
а за цикл спасибо, надеюсь доделаю эту прогу наконец-то...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 21:44     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
grizlik78
02.07.2011, 21:44     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
  #40

Не по теме:

Цитата Сообщение от Protected_fleur Посмотреть сообщение
а ну насчет отступов это да...проблема препод вечно ворчит блин, ну мне так удобно...
Он не ворчит, он стонет. И это не может быть удобно, потому что это не может быть удобно никогда

Yandex
Объявления
02.07.2011, 21:44     Написать программу, определяющую радиус и центр окружности, проходящей по крайней мере через три различные точки заданного множества точек
Ответ Создать тему

Метки
описанная окружность
Опции темы

Текущее время: 09:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru