1

Тема: Точка касательной

Помогите решить задачу: Дана точка (х1,у1) и окружность (х0,у0,R0). Найти координаты точки (x2,y2), чтобы прямая (х1,у1,х2,у2) была б касательной к даной окружности.

2

Re: Точка касательной

Вроде самый "тупой" способ это что,будем искать (x2,y2) такую что она уже лежит на окружности.
Так как "Касательная к окружности перпендикулярна к радиусу, проведённому в точку касания",то по теореме Пифагора находим (расстояние R2 от (x1,y1) до (x2,y2),две другие стороны нам известны).
Теперь построим окружность (x1,y1,R2). Точки пересечения этой окружности и (x0,y0,R) и будут искомыми,можно выбирать любую (а так же любую точку на прямой касательной).

А как пересечь окружности и найти точки пересечения есть на этом сайте.

3

Re: Точка касательной

Видимо, поточней и попроще будет идти напрямик, без пересечения окружностей. Кажется, можно так: тоже рассмотрим этот прямоугольный треугольник, пусть AOB (A - заданная нам точка, O - центр окружности, B - искомая). Тогда мы можем найти угол AOB (потому что мы знаем его косинус: cos=OB/OA=R/OA), теперь надо просто взять вектор OA, пронормировать до длины R=OB, и повернуть в обе возможные стороны на угол AOB. Поскольку для поворота достаточно знать синус и косинус угла, то даже не понадобится явно восстанавливать угол AOB (по cos найдём и синус). Итого очень простой код и всего два корня, что неплохо по точности.

Если я, конечно, не ошибся пока придумывал smile

4

Re: Точка касательной

Да,это я тоже видел,но я не умею нормировать roll у меня голова кружиться smile

5

Re: Точка касательной

Ну "нормировать по длине" - это всего лишь разделить обе координаты на старую длину и умножить на новую smile