Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Скругление двух дуг


Автор: Чупакабро 14.9.2009, 16:47
Помогите пожалуйста рассчитать координаты центра дуги заданного радиуса, скругляющей две другие пересекающиеся дуги.

Автор: Pavia 14.9.2009, 18:00
Советую поискать готовые работы. Я так думаю точно тут не рассчитаешь, а вот с некоторыми приближениями можно. Возьми императорскую формулу.
В точке соединения найди сосательные они дадут угол. На биссектрисе угла располагаем центр окружности. Даль предлагаю сделать так

Если у нас угол 90 градусов то располагаем на расстояние от точки пересечения sqrt(2)*R Если  угол 180 градусов то на R.
Откуда для произвольного угла.  y=kx+b b=2*sqrt(2)-1 k=(1-sqrt(2))/90  вдоль биссектрисы располагаешь на расстоянии y*R. Это для угла меньше 180. Если угол больше 180 то биссектриса должна направленна в другую сторону.

Автор: AVA12 14.9.2009, 18:29
Имеем пересекающиеся окружности {x1, y1, r1} и {x2, y2, r2}, нужно скруглить их дугой радиуса r. Очевидно, что центр скругляющей дуги будет отстоять от каждой окружности на r. В случае, изображенном на картинке, очевидно, что центр дуги будет лежать внутри обеих окружностей. Т. е., искомый центр принадлежит окружностям {x1, y1, r1-r} и {x2, y2, r2-r}. Находим точки пересечения этих двух окружностей и выбираем ту, что ближе к точке пересечения исходных окружностей.

Дополнительная проблема: определить, где лежит центр скругляющей дуги относительно исходной окружности (внутри/снаружи). Если дуга 1 из точки пересечения "уходит" внутрь окружности 2, то центр скругляющей окружности лежит, соответственно, внутри окружности 2.

Кстати, центр скругляющей дуги очень редко лежит на биссектрисе угла касательных.

Автор: Bitter 15.9.2009, 11:33
Прошу прощения за оффтоп, но 

Цитата(Pavia @  14.9.2009,  18:00 Найти цитируемый пост)
В точке соединения найди сосательные


меня порвало сразу  smile  smile . +1

Автор: ~FoX~ 15.9.2009, 14:42
Можно попробовать так:
1. Определяем радиус кривизны в точке пересечения кривых (или рядом с ней).
2. Выбираем радиус сопряжения.
3. Далее по формуле (R-R1) и (R-R2) ищем центр сопряжения, где R1 и R2 - радиусы кривизны, а R - радиус сопряжения.
4. Собственно, строим внутренне сопряжение.

Если кривые направлены в разные стороны, то используем смешанное сопряжение для внешнего сопряжения радиусом (R+R1), а для внутреннего - радиусом (R-R2).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)