Как создать аппроксимацию 2-й дуги с отрезками?
У меня есть полилинейный контур, состоящий из отрезков и дуг окружностей, которые я хочу выдавливать на призмы.
Так как мои функции выдавливания поддерживают только прямые полигоны, мне нужно аппроксимировать дуги, используя отрезки.
Дуги определяются через начальную точку, центральную точку и угол развертки (CCW).
Углы развертки мне нужно отображать в диапазоне от <10° до 179,9° с радиусами от 0,3 до 300 мм.
В настоящее время я вычисляю количество вершин дуг для вычисления и добавляю их в свой полигон простым способом: я просто помещаю вершину на каждый мм длины данной дуги. Хотя это работает, это кажется очень неэффективным для дуг с большим радиусом и небольшим углом поворота.
Должен быть алгоритм, который генерирует хорошие аппроксимации для всех видов дуг. Если есть, я хотел бы знать некоторые ключевые слова, чтобы сузить мой поиск в Google.
1 ответ
Если дуга имеет угол разворота a, радиус r, то наибольшее расстояние между хордой с одинаковыми конечными точками и дугой составляет r*(1-cos(a/2). Если вы разделите эту дугу, поместив n одинаково разнесенных точек вдоль это, тогда максимальное расстояние между дугой и сегментированной линией будет r*(1-cos(a/(2*(n+1)))).
Так, если вы хотите сохранить наибольшее расстояние ниже E, скажем, тогда вы можете поместить n новых точек вдоль дуги, причем n выбрано так, чтобы n+1 >= a/(2*acos(1 - E/r))