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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.01.2013, 02:54   #1
Sofi Kold
 
Регистрация: 19.01.2013
Сообщений: 6
По умолчанию Пересечение прямой с окружностью

Помогите с алгоритмом.
Дано пересечение окружности (задан радиус и центр окружности в некой точке (x,y)) и прямой (Ax+By+C=0). Нужны идеи по алгоритму данной задачи.
Какие идеи?
Sofi Kold вне форума Ответить с цитированием
Старый 19.01.2013, 02:59   #2
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

решить систему уравнений?)
Pein95 вне форума Ответить с цитированием
Старый 19.01.2013, 03:08   #3
Sofi Kold
 
Регистрация: 19.01.2013
Сообщений: 6
По умолчанию

Я пыталась с помощью перенесения центра окружности в центр координат (наиболее популярный в google), но там не учитывается первоначальное положение окружности (мозговой штурм у меня плохо удается). Может я этой части тупо не вижу?

Вот алгоритм:
Вместо формального решения системы двух уравнений подойдём к задаче с геометрической стороны (причём, за счёт этого мы получим более точное решение с точки зрения численной устойчивости).

Предположим, не теряя общности, что центр окружности находится в начале координат (если это не так, то перенесём его туда, исправив соответствующе константу C в уравнении прямой). Т.е. имеем окружность с центром в (0,0) радиуса r и прямую с уравнением Ax + By + C = 0.

Сначала найдём ближайшую к центру точку прямой - точку с некоторыми координатами (x0,y0). Во-первых, эта точка должна находиться на таком расстоянии от начала координат:

|C|/sqrt(A2+B2)

Во-вторых, поскольку вектор (A,B) перпендикулярен прямой, то координаты этой точки должны быть пропорциональны координатам этого вектора. Учитывая, что расстояние от начала координат до искомой точки нам известно, нам нужно просто нормировать вектор (A,B) к этой длине, и мы получаем:

x0 = - A* C/ (A2+B2)

y0 = - B* C/(A2+B2)
(здесь неочевидны только знаки 'минус', но эти формулы легко проверить подстановкой в уравнение прямой - должен получиться ноль)

Зная ближайшую к центру окружности точку, мы уже можем определить, сколько точек будет содержать ответ, и даже дать ответ, если этих точек 0 или 1.

Действительно, если расстояние от (x0, y0) до начала координат (а его мы уже выразили формулой - см. выше) больше радиуса, то ответ - ноль точек. Если это расстояние равно радиусу, то ответом будет одна точка - (x0,y0). А вот в оставшемся случае точек будет две, и их координаты нам предстоит найти.

Итак, мы знаем, что точка (x0, y0) лежит внутри круга. Искомые точки (ax,ay) и (bx,by), помимо того что должны принадлежать прямой, должны лежать на одном и том же расстоянии d от точки (x0, y0), причём это расстояние легко найти:


d = sqrt ( r2 - C2/ (A2+B2))

Заметим, что вектор (-B,A) коллинеарен прямой, а потому искомые точки (ax,ay) и (bx,by) можно получить, прибавив к точке (x0,y0) вектор (-B,A), нормированный к длине d (мы получим одну искомую точку), и вычтя этот же вектор (получим вторую искомую точку).

Окончательное решение такое:


mult = sqrt ( d2/ (A2+B2))


ax = x0 + B mult
ay = y0 - A mult
bx = x0 - B mult
by = y0 + A mult
Если бы мы решали эту задачу чисто алгебраически, то скорее всего получили бы решение в другом виде, которое даёт бОльшую погрешность. Поэтому "геометрический" метод, описанный здесь, помимо наглядности, ещё и более точен.

Последний раз редактировалось Sofi Kold; 19.01.2013 в 03:13.
Sofi Kold вне форума Ответить с цитированием
Старый 19.01.2013, 03:59   #4
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

а может попробовать систему уравнений? неужели там все сложно так?

Ошибка) пост не тот)

Последний раз редактировалось Stilet; 19.01.2013 в 11:28.
Pein95 вне форума Ответить с цитированием
Старый 19.01.2013, 04:07   #5
Sofi Kold
 
Регистрация: 19.01.2013
Сообщений: 6
По умолчанию

Уфф!!! Я совсем затупила. Там же еще можно тупо геометрическими формулами вычислять! Всего-то пару строк кода получится.
Все равно, спасибо!
Sofi Kold вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Число точек пересечения прямой с окружностью Night61 Помощь студентам 1 20.01.2012 16:57
Пересечение эллипса с прямой (Delphi) 0rtega Помощь студентам 0 13.04.2010 21:45
delphi управление окружностью tanek Помощь студентам 10 06.03.2010 20:58
Пересечение прямой и круга CoGnaC Паскаль, Turbo Pascal, PascalABC.NET 8 11.03.2008 17:01