Как создать аппроксимацию 2-й дуги с отрезками? - PullRequest
4 голосов
/ 08 сентября 2010

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

Поскольку мои функции выдавливания поддерживают только многоугольники с прямыми кромками, мне нужно приблизить дугис использованием отрезков.

Дуги определяются через начальную точку, центральную точку и угол развертки (CCW).

Углы развертки, которые мне нужны для отображения в диапазоне от <10 ° до 179,9 °с радиусами в диапазоне от 0,3 мм до 300 мм. </p>

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

Должен существовать алгоритм, который генерирует хорошие аппроксимации для всех видов дуг.Если есть, я хотел бы знать некоторые ключевые слова, чтобы сузить мой поиск в Google.

1 Ответ

4 голосов
/ 08 сентября 2010

Если у дуги есть угол развертки 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))

...