Хорошо, если ваши переменные:
C = (cx, cy) - Circle center
A = (x1, y1) - Tangent point 1
B = (x2, y2) - Tangent point 2
Линии от центра круга до двух точек A
и B
равны CA = A - C
и CB = B - C
соответственно.
Вы знаете, что касательная перпендикулярна линии от центра.В 2D, чтобы получить линию, перпендикулярную вектору (x, y)
, вы просто берете (y, -x)
(или (-y, x)
)
Итак, ваши две (параметрические) касательные линии:
L1(u) = A + u * (CA.y, -CA.x)
= (A.x + u * CA.y, A.y - u * CA.x)
L2(v) = B + v * (CB.y, -CB.x)
= (B.x + v * CB.y, B.x - v * CB.x)
Затем для вычисления пересечения двух линий вам просто нужно использовать стандартные тесты пересечения .