Вычислить точку пересечения двух касательных на одном круге? - PullRequest
2 голосов
/ 26 июня 2011

Я пытался использовать функцию в стиле raycasting, но не смог получить никаких поддерживаемых результатов. Я пытаюсь вычислить пересечение между двумя касательными на одном круге. Эта картина должна помочь объяснить:

enter image description here

Я гуглил + искал stackoverflow об этой проблеме, но не могу найти ничего похожего на эту проблему. Любая помощь?

Ответы [ 2 ]

3 голосов
/ 26 июня 2011

Хорошо, если ваши переменные:

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)

Затем для вычисления пересечения двух линий вам просто нужно использовать стандартные тесты пересечения .

1 голос
/ 26 июня 2011

Ответ Питера Александра предполагает, что вы знаете центр круга, что не очевидно из вашей фигуры http://oi54.tinypic.com/e6y62f.jpg. Вот решение, не зная центра:

Точка C (на вашей фигуре) - это пересечение касательной в A(x, y) с линией L, перпендикулярной AB, разрезая AB на две половины.Параметрическое уравнение для линии L может быть получено следующим образом:

Средняя точка AB равна M = ((x+x2)/2, (y+y2)/2), где B(x2, y2).Вектор, перпендикулярный AB, равен N = (y2-y, x-x2).Следовательно, векторное уравнение линии L равно L(t) = M + t N, где t - действительное число.

...