Поиск двух соприкасающихся кругов с ограниченной информацией

Я работаю над редактором треков и оказался в ситуации, когда мне нужно определить два соприкасающихся круга. В идеале я хотел бы знать центральную точку и радиус этих кругов.

Информация, которой я располагаю, — это точка на окружности каждого из кругов и касательная к окружности в этой точке.

Самостоятельно я понял, что если я знаю касательные в этих точках, я знаю линии, на которых должны лежать центральные точки.

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| ) было сведено к минимуму.


person Chad Edwards    schedule 04.04.2011    source источник
comment
Похоже, у вас есть система уравнений с тремя уравнениями и четырьмя неизвестными; не хороший знак. Я не умею считать прямо сейчас, но вы должны нарисовать тщательно обозначенную диаграмму, иногда это помогает прояснить проблему и, конечно же, помогает донести ее. Вы также можете попробовать math.stackexchange.com, поскольку это не совсем вопрос программирования.   -  person Tim Sylvester    schedule 04.04.2011


Ответы (1)


Если у вас есть только касательные векторы и точка, информации недостаточно. Нужно еще как минимум 2 точки, по одной на каждый круг, иначе t1 и t2 могут быть любыми действительными.
(Кстати, A = -B) Не обращайте внимания, я предположил, что круги не пересекаются. В любом случае, мы не можем знать, насколько они велики (и, следовательно, где находятся центральные точки), не имея дополнительной информации.

person Community    schedule 04.04.2011
comment
Спасибо. Когда я смотрю на то, чего я пытаюсь добиться здесь, я понимаю, что мне нужны два круга, чтобы разница между длинами радиусов была минимальной. - person Chad Edwards; 04.04.2011