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

Непересекающиеся окружности - C++

Восстановить пароль Регистрация
 
Ch3r3p0sha
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 11
13.10.2009, 12:10     Непересекающиеся окружности #1
Окружность на плоскости однозначно может быть определена координатами ее центра (x,y) и радиусом r. Пусть заданы соответствующие характеристики нескольких окружностей: x1, y1, r1; x2, y2, r2 ... xn, yn, rn. Найти среди этих окружностей все уединенные окружности, т.е. такие, которые не имеют общих точек ни с одной из остальных окружностей, не лежат целиком внутри и не заключают в себе какой-либо другой окружности.
Помогите пожалуста решить, на borland C++ через массивы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2009, 12:10     Непересекающиеся окружности
Посмотрите здесь:

Окружности и треугольник! C++
Класс "Окружность" с данными центр и радиус окружности. Вычислить длину и площадь окружности. C++
C++ две окружности
C++ Окружности
C++ Рисование окружности
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
13.10.2009, 18:34     Непересекающиеся окружности #2
Сдается мне, что ответом может быть несколько.
То есть в общем случае уединенных откружностей может быть несколько вариантов.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
13.10.2009, 21:43     Непересекающиеся окружности #3
Принцип простой - надо найти взаимные расстояния между центрами окружностей. Для N окружностей можно составить массив размером N*N по принципу футбольной таблицы: число в строке I и столбце J - расстояние между центрами окружностей под номерами I и J (на самом деле можно обойтись массивом размером N*(N-1)/2, но будет сложнее находить нужные элементы). Две окружности не имеют общих точек тогда и только тогда, когда расстояние между ними больше суммы их радиусов (d>r1+r2). Окружность будет уединённой, если она не имеет общих точек со всеми другими окружностями (условию удовлетворяют все числа в строке или столбце, соответствующем окружности, с пропуском диагонального элемента, т.е. не сравниваем окружность саму с собой).
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
14.10.2009, 12:25     Непересекающиеся окружности #4
Прочитал условие еще раз.
Требуется найти просто уединенные окружности, а не их набор.
Легко - попарно сравниваем и все.
Можно даже массив не заводить
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
14.10.2009, 20:42     Непересекающиеся окружности #5
Цитата Сообщение от odip Посмотреть сообщение
Прочитал условие еще раз.
А если прочитать ещё раз, то можно увидеть, что решать надо как раз-таки с помощью массивов.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
14.10.2009, 22:23     Непересекающиеся окружности #6
Я имею в виду, что дополнительный массив нет смысла заводить.
А решить через массивы - это значит что xi, yi, ri лежат в трех массивах.
Ch3r3p0sha
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 11
08.12.2009, 02:43  [ТС]     Непересекающиеся окружности #7
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h> 
void main()
 {
  int xx[200], yy[200], rr[200],jj[200],f1[200],k,d=0,i,j,n;clrscr();
  printf("Vvedite 4islo okrujnostey: ");scanf("%d",&n);
  randomize();
  for(i=0;i<n;i++)
   {
    xx[i]=100-random(200);
    yy[i]=100-random(200);
    rr[i]=1+random(40);
   }
  for(i=0;i<n;i++)
   {
    for(j=0,k=0;j<n&&k==0;j++)
     {
      if(i==j)j=i+1;
      if (sqrt(pow(xx[i]-xx[j],2)+pow(yy[i]-yy[j],2)) <= (rr[i]+rr[j]))
 k++;
     }
    if(k==0)
     {f1[d]=i;d++;}
   }
  if(d!=0)
   {
    printf("\nUedinennie okrujnosti:");
    for(i=0;i<d;i++)
     printf("\n(%d,%d),%d",xx[f1[i]],yy[f1[i]],rr[f1[i]]);
   }
  else printf("\nUedinennih okrujnostey NET");
  getch();
 }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2016, 22:21     Непересекающиеся окружности
Еще ссылки по теме:

Круги в окружности C++
C++ По заданным координатам центра окружности и ее радиусу определить координаты точек пересечения окружности с осями координат.
Радиус вписанной окружности C++

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

Или воспользуйтесь поиском по форуму:
tosha_prog
0 / 0 / 1
Регистрация: 28.01.2016
Сообщений: 11
28.01.2016, 22:21     Непересекающиеся окружности #8
Вот так надо делать:
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
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include <math.h>
#include<iostream>
#include<iomanip>
 
using namespace std;
 
int main()
{
    int a[200][3], flag, i, j, n;
    //  clrscr();
        printf("Vvedite 4islo okrujnoctey: "); scanf("%d", &n);
        for(i=0; i<=n-1; i++)
        {
            cout<<"Okryjnoctb: "<<i+1<<endl;
            
            cout<<"xx["<<i+1<<"]= ";
            cin>>a[i][0];
 
            cout<<"yy["<<i+1<<"]= ";
            cin>>a[i][1];
            
             cout<<"rr["<<i+1<<"]= ";
             cin>>a[i][2];
       }
                   
for(i=0;i<=n-1;i++)
                  {  flag=1;
                     for(j=0; j<=n-1&&flag; j++)
                              
                              if (i!=j)
                              if (sqrt((a[i][0]-a[j][0])*(a[i][0]-a[j][0])+(a[i][1]-a[j][1])*(a[i][1]-a[j][1]))<=(a[i][2]+a[j][2])) flag=0;
                              
               if (flag) printf("Yedinenaya okpyjnoct %d\n",i+1);
                           
                }
               
 
    
            fflush(stdin);
            getchar();
}
Yandex
Объявления
28.01.2016, 22:21     Непересекающиеся окружности
Ответ Создать тему
Опции темы

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