Цитата(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)
Выглядит, увы, несимметрично.
Подкоренное выражение положительно, когда точка вне круга, отрицательно, когда точка в круге и нулевое для точки на круге.
Покорнейше благодарю, только прибыл домой, пока нет времени проверить, но я думаю, что все правильно))