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

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

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

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

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

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

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

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

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

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

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

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

56
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:45  [ТС] #31
спасибо)))
у меня есть еще вопрос: как сделать, чтоб эта окружность содержала внутри наибольшее количество точек заданного множества??? нужно вроде подсчитать точки внутри и снаружи...но как это сделать???
подскажите пожалуйста
0
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,037
02.07.2011, 19:48 #32
Перебрать все точки, да посчитать, сколько их внутри
Точка (x,y) лежит внутри окружности (x0,y0,R), если (x-x0)²+(y-y0)² < R²
При равенстве точка лежит на окружности. Я бы тоже отнёс ко внутренним для данной задачи.
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 19:49  [ТС] #33
точно... Спасибо большое
мне аж жить хочется когда начинаю понимать...
0
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] );  }
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 21:18  [ТС] #35
как задать этот цикл перебора?
0
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,037
02.07.2011, 21:24 #36
C
1
2
3
for (m=0; m<n; m++)
{
}
0
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] );  }
0
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,037
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
        {
          // снаружи
        }
      }
    }
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 21:40  [ТС] #39
а ну насчет отступов это да...проблема препод вечно ворчит блин, ну мне так удобно...
а за цикл спасибо, надеюсь доделаю эту прогу наконец-то...
0
grizlik78
02.07.2011, 21:44
  #40

Не по теме:

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

0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
02.07.2011, 22:42  [ТС] #41
возможно, и я, когда стану опытным программистом, буду стонать, когда увижу свои отступы...

Добавлено через 53 минуты
Как всегда на чем-нибудь да спотыкаюсь...
Как мне сделать так, чтоб находилась окружность с наибольшим количеством точек внутри???
Я вот тут сделала, чтоб просто считал точки внутри... и то по-моему что-то не так...
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
int main() {
        int i, j, n, k, m, t=0, t1=0;
        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] ); 
              //проверка точек
        for (m=0; m<n; m++) {
        if ((Points[m][0]-c.x)*(Points[m][0]-c.x) + (Points[m][1]-c.y)*(Points[m][1]-c.y) <= c.r*c.r) t++;
        }
        if (t>t1)
        {
                  t1=t;
                  }  }
              
    printf("Center: (%g, %g)\n", c.x, c.y);
    printf("Radius: %g\n", c.r);
    printf("points inside: %d",t1);
        
        _getch();
        return 0;  }
помогите пожалуйста...
0
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,037
02.07.2011, 22:44 #42
Да, что-то не так. Переменная t обнуляется только вначале, а дальше только растёт. А ведь она считает точки внутри каждой окружности.
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
03.07.2011, 13:31  [ТС] #43
вроде с подсчетом точек внутри разобралась...
А вот как теперь сделать, чтоб выбиралась окружность с наибольшим количеством точек внутри???
Помогите пожалуйста!
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
int main() {
        int i, j, n, k, m, t1=0,t;
        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] ); 
             //проверка точек
        t=0;
        for (m=0; m<n; m++) 
        {
        if ((Points[m][0]-c.x)*(Points[m][0]-c.x) + (Points[m][1]-c.y)*(Points[m][1]-c.y) <= c.r*c.r) t++;
        }
        if (t>t1)
        {
                  t1=t;
                  }  }
    printf("Center: (%g, %g)\n", c.x, c.y);
    printf("Radius: %g\n", c.r);
    printf("points inside: %d",t1);
        
        _getch();
        return 0;  }
0
grizlik78
Эксперт С++
1974 / 1467 / 122
Регистрация: 29.05.2011
Сообщений: 3,037
03.07.2011, 13:34 #44
Вот там, где t1=t можно сохранять в отдельных переменных и окружность, и точки, по которым она построена.
После циклов вывести.
0
Protected_fleur
0 / 0 / 0
Регистрация: 29.06.2011
Сообщений: 77
03.07.2011, 14:00  [ТС] #45
Цитата Сообщение от grizlik78 Посмотреть сообщение
Вот там, где t1=t можно сохранять в отдельных переменных и окружность, и точки, по которым она построена.
После циклов вывести.
блин((( как это сделать???
нужно будет еще один цикл для того, чтоб наибольшее количество точек внутри находил?
0
03.07.2011, 14:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2011, 14:00
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

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