Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
#1

Выяснить взамное расположение - C++

06.03.2013, 21:12. Просмотров 585. Ответов 14
Метки нет (Все метки)

Здравствуйте, дорогие форумчане.
------------------------------------
Помогите, пожалуйста, написать программу. Заранее благодарен.
Вот само задание:
Выяснить взаимное расположение круга и круга.
-------------------
Заранее благодарен.
Значений никаких нет, поэтому, если надо, то можно задавать свои.
http://www.cyberforum.ru/cpp-beginners/thread1334634.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2013, 21:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выяснить взамное расположение (C++):

Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода
Поле шахмотной доски определяеся парой натуральных чисел, каждая из которых не...

Расположение файлов
Здравствуйте, я скачал библиотеку opencv. Мне нужно написать алгоритм...

Взаимное расположение треугольников
Не могу понять как можно вычислить если угол одного треугольника касается...

Расположение переменных в памяти
Было в Эккеле вот такое вот упражнение : "Определить подряд два массива типа...

Взаимное расположение линий
Здравствуйте! Не могу реализовать математически взаимное расположение линий....

14
instagib
122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
06.03.2013, 21:27 #2
sanyachel9binsk, я лично не понимаю задания.
0
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
06.03.2013, 21:51  [ТС] #3
Цитата Сообщение от instagib Посмотреть сообщение
sanyachel9binsk, я лично не понимаю задания.
Ну даны два круга. Надо выяснить их взаимное расположение.
0
Миниатюры
Выяснить взамное расположение  
instagib
122 / 85 / 16
Регистрация: 14.02.2011
Сообщений: 340
06.03.2013, 21:53 #4
sanyachel9binsk, ну относительно чего выяснять? центров окружности? растояние? относительно осей?
0
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
07.03.2013, 18:46  [ТС] #5
Цитата Сообщение от instagib Посмотреть сообщение
sanyachel9binsk, ну относительно чего выяснять? центров окружности? растояние? относительно осей?
И того, и того, и того. Просто этого не дано было в условии.

Добавлено через 10 минут
Вообщем такое задание в целом:
Даны два круга. Надо выяснить их взаимное расположение относительно центров окружности, растояния, относительно осей.
-----------
Надо написать программу для каждого случая отдельно. Заранее благодарен.

Добавлено через 28 минут
Ну я тут посидел и подумал...
Вообщем на паскале как-то так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses crt;
const t=0.01;
var x1,y1,r1,x2,y2,r2,d:real;
begin
clrscr;
writeln('Введите координаты центра и радиус первой окружности:');
readln(x1,y1,r1);
writeln('Введите координаты центра и радиус второй окружности:');
readln(x2,y2,r2);
d:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if d>r1+r2 then write('Окружности отделены')
else if abs(d-(r1+r2))<=t then write('Окружности соприкасаются')
else if d<r1+r2 then
 begin
  if d>r1-r2 then write('Окружности пересекаются')
  else write('Окружность внутри друг друга');
 end;
readln
end.
Кто сможет на С++ переписать? Или подсказать, если у меня не правильно? За ранее благодарен.
0
Kuzia domovenok
2209 / 1978 / 441
Регистрация: 25.03.2012
Сообщений: 6,944
Записей в блоге: 1
07.03.2013, 18:50 #6
очевидно, тебе надо знать, пересекаются они или нет

C++
1
bool intersects=((r1+r2)*(r1+r2)>=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
Добавлено через 1 минуту
Цитата Сообщение от sanyachel9binsk Посмотреть сообщение
if d>r1-r2 then write('Окружности пересекаются') else write('Окружность внутри друг друга');
ты вообще о кругах начинал разговор.
теперь у тебя окружности...
0
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
07.03.2013, 18:54  [ТС] #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
очевидно, тебе надо знать, пересекаются они или нет

C++
1
bool intersects=((r1+r2)*(r1+r2)>=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
Добавлено через 1 минуту

ты вообще о кругах начинал разговор.
теперь у тебя окружности...
Ну в моем понимании - это тоже круг.

Добавлено через 52 секунды
А на С++ можно полный код тогда?
0
Kuzia domovenok
2209 / 1978 / 441
Регистрация: 25.03.2012
Сообщений: 6,944
Записей в блоге: 1
07.03.2013, 19:09 #8
Цитата Сообщение от sanyachel9binsk Посмотреть сообщение
Ну в моем понимании - это тоже круг.
в пятый класс церковно-приходской школы!
круги, находящиеся друг внутри друга, пересекаются, описывающие их окружности НЕТ.
так что определяйся. разница есть.
1
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
07.03.2013, 20:48  [ТС] #9
Вообщем вот задание:
Даны два круга. Надо выяснить их взаимное расположение относительно центров окружности, расстояния, относительно осей.
Пожалуйста, если сможете, то напишите код на C++. Заранее благодарен.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses crt;
const t=0.01;
var x1,y1,r1,x2,y2,r2,d:real;
begin
clrscr;
writeln('Введите координаты центра и радиус первого круга:');
readln(x1,y1,r1);
writeln('Введите координаты центра и радиус второго круга:');
readln(x2,y2,r2);
d:=sqrt(sqr(x1-x2)+sqr(y1-y2));
if d>r1+r2 then write('Круги отделены')
else if abs(d-(r1+r2))<=t then write('Круги соприкасаются')
else if d<r1+r2 then
 begin
  if d>r1-r2 then write('Круги пересекаются')
  else write('Круги внутри друг друга');
 end;
readln
end.
--------------------
Это я на паскале написал... Если что не правильно - подскажите, а лучше всего исправьте... Вообщем жду кода на С++. Заранее благодарен.
0
vyachesmine
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 22
07.03.2013, 21:38 #10
sanyachel9binsk, ща перепишу Жди

Добавлено через 35 минут
sanyachel9binsk,
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
#include <iostream.h>
#include <locale.h>
#include <math.h>
#define eps 0.01
struct circle
{
       double x;
       double y;
       double R;
};
int main()
{
    setlocale(0,".1251");
    double d;
    int i;
    circle num[3];
    for (i=1; i<=2; i++)
    {
        cout << "\nÂâåäèòå êîîðäèГ*Г*ГІГ» öåГ*ГІГ°Г* " << i << "-ГЈГ® êðóãГ*:";
        cin >> num[i].x >> num[i].y;
        cout << "\nÂâåäèòå Г°Г*äèóñ " << i << "-ГЈГ® êðóãГ*:";
        cin >> num[i].R;
    }
    d = pow((pow((num[1].x-num[2].x),2) + pow((num[1].y-num[2].y),2)),1/2.0);
    if (d > (num[1].R +num[2].R)) cout << "\nÊðóãè îòäåëåГ*Г».";
    else
    {
        if (fabs(d-(num[1].R + num[2].R) <= eps)) cout << "\nÊðóãè ñîïðèêГ*Г±Г*ГѕГІГ±Гї.";
        if (d > (num[1].R - num[2].R)) cout << "\nÊðóãè ïåðåñåêГ*ГѕГІГ±Гї.";
        else cout << "\nÊðóãè ГўГ*óòðè äðóã äðóãГ*.";
    }
  system("pause");
  return 0;
}
Если формулы все верные, то все ок, должно работать правильно. Прогони тесты на каждый случай.
1
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
10.03.2013, 12:37  [ТС] #11
А еще вроде вот так можно будет написать.
Правильно или нет?
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
67
#include<iostream.h>
#include<math.h>
#include<conio.h>
void main()
{double x1,y1,x2,y2,R1,R2,R,r,AB;
clrscr();
cout<<"vvedite koordinaty i radiys 1-i okr-sti\nx=";
cin>>x1;
cout<<"y=";
cin>>y1;
cout<<"R=";
cin>>R1;
cout<<"vvedite koordinaty i radiys 2-i okr-sti\nx=";
cin>>x2;
cout<<"y=";
cin>>y2;
cout<<"R=";
cin>>R2;
AB=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
if(R1>R2)
    {
     R=R1;r=R2;
     if(AB<R)
          if((R-AB)<r)
             cout<<"okr-sti peresekaiytsua";
          else
               if((R-AB)==r)
               cout<<"men'shaya okr-st' nahoditsya v bol'shei okr-sti i kasaetsya ee";
               else cout<<"men'shaya okr-st' nahoditsya v bol'shei okr-sti";
     else
          if(AB>R)
         if((AB-R)>r)
            cout<<"okr-sti ne peresekautsya i nahodyatsya vne dryg dryga";
         else
            if((AB-R)==r)
               cout<<"okr-sti kasautsya dryg dryga";
            else
             cout<<"okr-sti peresekautsya";
          else
         cout<<"okr peresekautsya";
      }
else
  {
   R=R2;r=R1;
   if(AB<R)
          if((R-AB)<r)
             cout<<"okr-sti peresekaiytsua";
          else
               if((R-AB)==r)
              if (AB==0&&R1==R2) cout<<"okr-sti sovmeschautsya";
              else
              cout<<"men'shaya okr-st' nahoditsya v bol'shei okr-sti i kasaetsya ee";
               else cout<<"men'shaya okr-st' nahoditsya v bol'shei okr-sti";
     else
          if(AB>R)
         if((AB-R)>r)
            cout<<"okr-sti ne peresekautsya i nahodyatsya vne dryg dryga";
         else
            if((AB-R)==r)
               cout<<"okr-sti kasautsya dryg dryga";
            else
             cout<<"okr-sti peresekautsya";
          else
         cout<<"okr peresekautsya";
      }
getch();
}
0
vyachesmine
7 / 7 / 1
Регистрация: 19.02.2013
Сообщений: 22
10.03.2013, 14:45 #12
sanyachel9binsk, зачем такое обилие if-else?? Усложняешь...
0
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
10.03.2013, 20:20  [ТС] #13
Цитата Сообщение от vyachesmine Посмотреть сообщение
sanyachel9binsk, зачем такое обилие if-else?? Усложняешь...
А как тут тогда объединить это все в одно условие?
0
Kuzia domovenok
2209 / 1978 / 441
Регистрация: 25.03.2012
Сообщений: 6,944
Записей в блоге: 1
10.03.2013, 20:29 #14
Цитата Сообщение от sanyachel9binsk Посмотреть сообщение
А как тут тогда объединить это все в одно условие?
я даже, не вникая в суть вижу, что у тебя код повторяется для всех условий...
А если нет разницы, зачем писать так
C++
1
2
3
4
5
6
7
8
9
10
11
if(R1>R2){
     R=R1;r=R2;
     if(AB<R)
         /*Куча кода*/
      }
else{
   R=R2;r=R1;
   if(AB<R)
   /*АБСОЛЮТНО то же САМОЕ*/
/*вторая куча кода*/
      }
Если можно так
C++
1
2
3
4
5
6
7
8
if(R1>R2){
     R=R1;r=R2;
}else{
   R=R2;r=R1;
}
if(AB<R){
         /*Одна куча к. на двоих*/
}
0
sanyachel9binsk
1 / 1 / 2
Регистрация: 27.10.2012
Сообщений: 209
11.03.2013, 21:15  [ТС] #15
Просто я там двойное условие делал.
0
11.03.2013, 21:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2013, 21:15
Привет! Вот еще темы с решениями:

Динамическое расположение файла
Добрый день, Возникла такая необходимость: Есть задача на считывание файла...

Взаимное расположение прямых
Люди.ПЛЗ помогите::wall::help: Даны вещественные числа A1, B1, C1, А, В, С....

Расположение консольной программы
Как программно узнать расположение КОНСОЛЬНОЙ исполняемой программы? В гугле...

Расположение переменных в памяти
int x; int y; int f; cout&lt;&lt;&amp;x&lt;&lt;' '&lt;&lt;&amp;f; f идет после x(x-&gt;f) int x;...


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

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

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