Я работаю над редактором треков и оказался в ситуации, когда мне нужно определить два соприкасающихся круга. В идеале я хотел бы знать центральную точку и радиус этих кругов.
Информация, которой я располагаю, — это точка на окружности каждого из кругов и касательная к окружности в этой точке.
Самостоятельно я понял, что если я знаю касательные в этих точках, я знаю линии, на которых должны лежать центральные точки.
C1 — центр первой окружности, которую я ищу
P1 — точка на окружности, в которой я знаю касательную
A — нормаль к касательной, которую я знаю в точке P1
C2 — центр второй окружности, которую я ищу
P2 — точка на окружности окружности, в которой я знаю касательную
B — нормаль к касательной, которую я знаю в точке P2
C1 = P1 - t1 * A
C2 = P2 - t2 * B
Я также знаю, что расстояние между двумя центрами будет равно сумме расстояний центров от точек на окружности.
|C1 - P1| + |C2 - P2| = |C1 - C2|
Я также хочу, чтобы abs( |t1*A| - |t2*B| ) было сведено к минимуму.