Помощь - Поиск - Пользователи - Календарь
Полная версия: Уравнение касательных к окружности
Форум «Всё о Паскале» > Образование и наука > Математика
Veers
Сколько ни гуглил, не искал на форумах (в т.ч. и этом). но так и не нашел, либо не понимаю следующее:

Составить уравнениЯ касательных к окружности, проходящих через заданную точку на плоскости. Причем не одно уравнение, а два, как это следует логически. Исходные данные - радиус окружности ®, точка центра окружности (xa, ya), точка на плоскости (xb, yb). Вообще то задача стоит найти касательные при вводе и т.д. и т.п, но я справился с тем случаем, когда точка лежит на окружности. Хотелось бы получить помощь по вышеизложенному вопросу.

Заранее спасибо.
TarasBer
Касательная проходит через (xb, yb), значит её уравнение такое:
kx(X-xb) + ky(Y-yb) = 0
Мы знаем, что расстояние от точки xa, ya до этой прямой должно быть равно R
Для начала вспомним, что расстояние от нуля до прямой, заданной уравнением (kx*x+ky*y=c) равно
c/sqrt(sqr(kx)+sqr(ky))
(ну площадь треугольника делим на основание)
Если брать расстояние не от нуля, а от (xa, ya), то получим в числителе с-kx*xa-ky*ya
В данном случае с=kx*xb+ky*yb
Таким образом, уравнение будет такое:
kx(xb-xa) + ky(yb-ya)/sqrt(sqr(kx)+sqr(ky)) = R
Умножив обе части на знаменатель и возведя в квадрат получим такое уравнение на kx и ky:
cxx*sqr(kx)+2cxy*kx*ky+cyy*sqr(ky) = 0
Где cxx=sqr(xb-xa)-sqr®; cyy=sqr(yb-ya)-sqr®; cxy = (xb-xa)(yb-ya);
Это однородное квадратное уравнение легко решается.
Подойдут
kx = -cxy+-sqrt(sqr(cxy)-cxx*cyy)
ky = cxx
либо
kx = cyy
ky = -cxy-+sqrt(sqr(cxy)-cxx*cyy)
Выглядит, увы, несимметрично.
Подкоренное выражение положительно, когда точка вне круга, отрицательно, когда точка в круге и нулевое для точки на круге.

Veers
Цитата(TarasBer @ 23.01.2010 15:17) *

Касательная проходит через (xb, yb), значит её уравнение такое:
kx(X-xb) + ky(Y-yb) = 0
Мы знаем, что расстояние от точки xa, ya до этой прямой должно быть равно R
Для начала вспомним, что расстояние от нуля до прямой, заданной уравнением (kx*x+ky*y=c) равно
c/sqrt(sqr(kx)+sqr(ky))
(ну площадь треугольника делим на основание)
Если брать расстояние не от нуля, а от (xa, ya), то получим в числителе с-kx*xa-ky*ya
В данном случае с=kx*xb+ky*yb
Таким образом, уравнение будет такое:
kx(xb-xa) + ky(yb-ya)/sqrt(sqr(kx)+sqr(ky)) = R
Умножив обе части на знаменатель и возведя в квадрат получим такое уравнение на kx и ky:
cxx*sqr(kx)+2cxy*kx*ky+cyy*sqr(ky) = 0
Где cxx=sqr(xb-xa)-sqr®; cyy=sqr(yb-ya)-sqr®; cxy = (xb-xa)(yb-ya);
Это однородное квадратное уравнение легко решается.
Подойдут
kx = -cxy+-sqrt(sqr(cxy)-cxx*cyy)
ky = cxx
либо
kx = cyy
ky = -cxy-+sqrt(sqr(cxy)-cxx*cyy)
Выглядит, увы, несимметрично.
Подкоренное выражение положительно, когда точка вне круга, отрицательно, когда точка в круге и нулевое для точки на круге.

Покорнейше благодарю, только прибыл домой, пока нет времени проверить, но я думаю, что все правильно))
TarasBer
Только сейчас дошло, что надо считать оба варианта ответа и брать тот, в котором числа по модулю больше. Так как может возникнуть пара (0, 0), она не годится.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.