Расчет касательной дуги между двумя точками на двух кругах

StackOverflow https://stackoverflow.com/questions/4100959

Вопрос

Как я могу рассчитать дугу между двумя кругами? Дуга должна быть касательной к двум точкам на кругах.

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

alt text

Подробнее:

Ваш апплет должен иметь 2 режима: 2D и 3D. Пользователь должен иметь возможность переключаться между ними, нажав на пробел. В 2D -режиме пользователь может редактировать положение четырех контрольных точек A, B, C и D и должен увидеть 4 круглых дуги, определенные этими точками следующим образом. Красная дуга лежит на кругу центра А и радиуса || ab ||. Зеленая дуга лежит на кругу центра C и радиуса || CD ||. Оранжевая дуга лежит на вспомогательном круге, который касается вспомогательного круга красной дуги в B, а также касается зеленого круга в точке E, который должен вычислить ваш код. Этот вспомогательный круг не должен отделять A и C (т.е. A и C должны быть либо как в этом круге, так и из этого). Точно так же голубая дуга лежит на круге, который не разделяет A и C и касается опорного круга зеленой дуги в D, а также касается вспомогательного круга красной дуги в какой -то точке F, который должна ваша программа вычислять. Красная дуга проходит по часовой стрелке от F до B. Оранжевая дуга проходит от B до E. Зеленая дуга проходит от E до D. Голубая дуга проходит от D до F. Эти четыре дуги образуют гладкую границу области s самолет. Обратите внимание, что в зависимости от положения контрольных точек, оранжевые и синие дуги могут быть либо вогнутыми, либо выпуклой. На рисунке ниже синяя дуга вогнута. (на фото выше)

Это было полезно?

Решение

Есть много "касательных кругов"!

alt text

Другие советы

Вообще говоря, вы не можете. Нарисуйте прямые линии через AB и CE и продлите их до точки пересечения. Позвоните в перекресток М. Вы можете нарисовать дугу через B и E, которая касается кругов, если и только если Bm = Em.

Пусть G - центр круга для дуги между B и E и H по кругу для дуги между F и D.

Ключевым моментом является то, что линия, которая пересекает круг, представляет собой касательную линию, если и только если она перпендикулярна радиусу на точке пересечения. Это означает, что если у вас есть два круга, которые касаются тангенты, то касательная точка и центры кругов коллинеарны.

Таким образом, это означает, что центр G представляет собой пересечение линии, определяемую B и A и линию, определяемую E и C., аналогично, центра H - пересечение линии, определяемой A и F, и линия, определяемой C и Подразделение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top