Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2009, 12:00   #1
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию Задача на окружности

На плоскости расположены две окружности,которые заданы центром и радиусами.определить сколько общих точек они имеют.

Помогите пожалуста.срочно!
Кода не надо,тока алгоритм
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 06.12.2009, 12:07   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Расстояние между центрами F= sqrt(sqr(x1-x2)+sqr(y1-y2))
Если F=R1+R2 (радиусы), то 1 точка
Если F>R1+R2, то нет точек
Если F<R1+R2 то 2 точки
Если F=0 то совпадают (много точек)
eoln вне форума Ответить с цитированием
Старый 06.12.2009, 12:24   #3
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Там 7 случаев должно быть.Ты уверен что тока 4?
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 06.12.2009, 12:30   #4
QuadroX
323787261
Пользователь
 
Аватар для QuadroX
 
Регистрация: 19.12.2008
Сообщений: 49
По умолчанию

Откуда там 7 случаев? Нарисуй 2 окружности которые пересекаются более чем в 2х точках. ^^

Вот тут почитай. http://dcs.isa.ru/www/vladimirv/Geom...sco_3_1_4.html
ICQ: 323787261
Email: pschegolevatykh@gmail.com
QuadroX вне форума Ответить с цитированием
Старый 06.12.2009, 12:44   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Да-да, поторопился
Если F<R1+R2 то 2 случая
а)Если F<R1 то одна из окружностей содержится в другой
б)Если F>R1 то есть пересечение
То же самое и для R2
Если F=0 и R1<>R2, то нет точек (+1 случай)
Вроде всё

Последний раз редактировалось eoln; 06.12.2009 в 12:54.
eoln вне форума Ответить с цитированием
Старый 06.12.2009, 13:01   #6
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Напиши пожалуста вместе эти 7 случаев вместе и какой ответ.
Плюс обеспечен.
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 06.12.2009, 14:58   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Код:
var
  x1, x2, y1, y2, r1, r2, f, tmp: real;
begin
  write('? ');
  readln(x1,x2,y1,y2,r1,r2);
  f := sqrt(sqr(x1-x2)+sqr(y1-y2));
  if r2>r1 then begin //r1 должно быть >= r2 иначе переименуем окружности
    tmp:=r1; r1:=r2; r2:=tmp;
    tmp:=x2; x1:=x2; x2:=tmp;
    tmp:=y1; y1:=y2; y2:=tmp
  end;
  if f=0 then
    if r1<>r2 then write('0')
    else write('mnogo')
  else
    if f>r1+r2 then write('0')
    else if f=r1+r2 then write('1')
    else if r1-r2<f then write('2')
    else if r1-r2=f then write('1')
    else write('0');
  readln
end.
eoln вне форума Ответить с цитированием
Старый 06.12.2009, 15:52   #8
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Большое спасибо
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 14.02.2010, 03:34   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

eoln, ну раз на эту тему дана ссылочка, то позволю себе чуть-чуть подправить (соптимизировать) Ваше решение...

мне кажется, что блок смены местами r1 и r2 явно лишний, если добавить в 2-х местах программы вычисление модуля числа!
примерно так:
Код:
var
  x1, x2, y1, y2, r1, r2, f : real;
begin
  write('? ');
  readln(x1,x2,y1,y2,r1,r2);
  f := sqrt(sqr(x1-x2)+sqr(y1-y2));
  if f=0 then
    if r1<>r2 then write('0')
    else write('mnogo')
  else
    if f>r1+r2 then write('0')
    else if f=r1+r2 then write('1')
    else if abs(r1-r2)<f then write('2')
    else if abs(r1-r2)=f then write('1')
    else write('0');
  readln
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.02.2010, 03:51   #10
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Сообщение от Ozerich Посмотреть сообщение
На плоскости расположены две окружности,которые заданы центром и радиусами.определить сколько общих точек они имеют.
Хочу заметить, что если радиусы окружностей и их центры совпадут, то количество общих точек будет 360 в градусах и бесконечно много... "не в градусах" )))
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дивижение окружности по окружности Irina8340 Помощь студентам 10 13.05.2009 20:25
движение окружности по окружности MyQwErTy Помощь студентам 13 04.11.2008 22:52
Касательные к окружности Dublin Мультимедиа в Delphi 3 21.10.2008 20:52
Текст в окружности. Adamant Свободное общение 4 27.09.2008 09:58
Движение окружности Ensoph Помощь студентам 4 25.09.2008 12:11