Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Скругление двух дуг |
Автор: Чупакабро 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 |
Прошу прощения за оффтоп, но меня порвало сразу ![]() ![]() |
Автор: ~FoX~ 15.9.2009, 14:42 |
Можно попробовать так: 1. Определяем радиус кривизны в точке пересечения кривых (или рядом с ней). 2. Выбираем радиус сопряжения. 3. Далее по формуле (R-R1) и (R-R2) ищем центр сопряжения, где R1 и R2 - радиусы кривизны, а R - радиус сопряжения. 4. Собственно, строим внутренне сопряжение. Если кривые направлены в разные стороны, то используем смешанное сопряжение для внешнего сопряжения радиусом (R+R1), а для внутреннего - радиусом (R-R2). |