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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2011, 12:22   #1
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию Нахождение пересечений двух окружностей

Стоит задача определить точки пересечений двух окружностей .
Нужна именно общая формула
Нам известны x10,x20,y10,y20,r1,r2
нужно определить x и y - точки пересечения
Прим : предполагается что x и y являются решениями обеих уравнений

(x - x10)^2 + (y - y10)^2 =r1^2
(x - x20)^2 + (y - y20)^2 =r2^2
(в системе)
вычитаем из одного выражение другое и получаем

-2*x*x10 + x10^2 -2*x*x20 + x20^2 - 2*y*y10 + y10^2 - 2*y*y20 + y20^2 +r1^2 - r2^2 = 0
выносим за скобки общие множители
-2*x*(x10-x20) - 2*y*(y10 - y20) + x10^2 +x20^2 + y10 ^2 +y20^2 + r1^2-r2^2 =0

введем некоторые обозначения для упрощения задачи

Код:
double a = -2 * (x10 - x20);
double b = -2 * (y10 - y20);
double c = x10*x10 + x20*x20 + y10*y10 + y20*y20 + r1*r1 + r2*r2;

получаем a*x + b*y + c =0

выражаем x через y
-a*x = b*y + c
x = (b*y + c ) / -a

подставляем ,получаем
a * ( (b*y + c) / -a ) + b*y + c =0
a * ((b*y +c ) /-a) = -(b*y+c) = -b*y -c

-b*y + b*y +c -c =0
b*y = b*y

и в итоге получается y - любое .

В чем у меня ошибка ?
Hemul вне форума Ответить с цитированием
Старый 02.11.2011, 12:53   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Как-то фигово вычитаете, перепутаны плюсы и минусы.
А уравнение (прямой) ax+by+c=0 имеет решение при любом y, если только a не равно нулю, всё верно. Только вот это следствие исходной системы, а не эквивалентная форма. Для иллюстрации, возьмите систему уравнений без решения, x=3, x=5. Складываем два равенства, получаем x=4 и заявляем, что это решение.
Abstraction вне форума Ответить с цитированием
Старый 02.11.2011, 13:44   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Abstraction, согласен.

Hemul
загляните сюда - algolist.manual.ru - Пересечение: Две окружности
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.11.2011, 15:25   #4
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

спасибо за ссылку, разобрался

в итоге получилась функция

Код:
struct point
{
  double x,y;
};
Код:
int get_points_of_intersection(double x10,double y10,double r1 ,//координаты центра и радиус
                        double x20,double y20,double r2 ,
                        point &first , point &second  ) //возвращаем результаты
{
    double x0,y0;//координаты точки пересечения всех линий

    double d;//расстояние между центрами окружностей
    double a;//расстояние от r1 до точки пересечения всех линий
    double h;//расстояние от точки пересеч окружностей до точки пересеч всех линий

    d=sqrt( pow(abs(x10-x20),2) + pow(abs(y10-y20),2));
    if(d > r1+r2) return 0; //окружности не пересекаются

    a= (r1*r1 - r2*r2 + d*d ) / (2*d);
    h= sqrt( pow(r1,2) - pow(a,2));


    x0 = x10 + a*( x20 - x10 ) / d;
    y0 = y10 + a*( y20 - y10 ) / d;

    first.x= x0 + h*( y20 - y10 ) / d;
    first.y= y0 - h*( x20 - x10 ) / d;

    if(a == r1 ) return 1; //окружности соприкасаются

    second.x= x0 - h*( y20 - y10 ) / d;
    second.y= y0 + h*( x20 - x10 ) / d;

    return 2;//окружности пересекаются
}
возвращает количество точек пересечения ,а координаты находятся в структурах first и second

Последний раз редактировалось Hemul; 02.11.2011 в 15:42.
Hemul вне форума Ответить с цитированием
Старый 02.11.2011, 15:49   #5
KobolD
Форумчанин
 
Регистрация: 10.06.2010
Сообщений: 239
По умолчанию

У вас не учтен вариант, когда одна окружность находится внутри другой, при этом они не пересекаются. У вас условие (d > r1+r2) вернет false, а при извлечении корня выскочит ошибка
Чтобы слова не расходились с делом, нужно молчать и ничего не делать.
KobolD вне форума Ответить с цитированием
Старый 02.11.2011, 16:04   #6
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

в статье об этом не упоминалось . Спасибо , исправлю.
Hemul вне форума Ответить с цитированием
Старый 02.11.2011, 16:58   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
в статье об этом не упоминалось
подразумевалось. за словами - "если они существуют. "
значит, возможны варианты, когда окружности лежат одна в другой или удалены или соприкасаются (одна точка пересечения=точке соприкосновения)

а ещё может быть, что окружности полностью совпадают. тогда точек пересения - БЕСКОНЕЧНО много!

а вообще, зря поиском не пользуетесь.
на форуме были уже такие темы.
вот, загляните сюда:
Задача на окружности
тут разные варианты описаны.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нахождение среднего арифметического двух длинных чисел Nortos Помощь студентам 2 24.12.2010 21:23
Нахождение НОД двух чисел awlol Помощь студентам 2 28.11.2010 22:52
Нахождение экстремума функции от двух переменных dekameron Помощь студентам 3 26.05.2010 08:16
Нахождение совпадений в двух книгах Professor Hubert Microsoft Office Excel 5 25.07.2008 12:59
Нахождение двух одинаковых элементов в массиве Stas))) Помощь студентам 4 01.06.2007 12:23