РаскройОнлайн

Ломаная линия и аналитический расчёт длины дуг

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

Что такое ломаная линия

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

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

Прямая линия между двумя точками дуги всегда короче самой дуги — она «срезает угол». Чем больше отрезков в ломаной, тем ближе результат к истине, но точным он не станет никогда — а чем больше отрезков, тем больше вычислений.

началоконец
истинная дугаломаная из 3 отрезковломаная из 4 отрезков

Что такое аналитический расчёт

У окружности и дуги есть точная формула длины — через радиус и угол, без разбиения на отрезки и без накопленной погрешности:

окружностьL = 2·π·r
дугаL = r·θθ — угол дуги в радианах

Отдельный случай — дуговой сегмент полилинии. В формате DXF у полилинии нет отдельного объекта «дуга»: вместо этого у обычной вершины есть необязательный параметр bulge («выпуклость») — число, которое говорит «segment до следующей вершины — не прямая, а дуга с такой-то кривизной». Если bulge не задан (большинство вершин), сегмент — обычная прямая и считается точно безо всяких формул. Если задан — угол и радиус дуги восстанавливаются из bulge и длины хорды:

угол дугиθ = 4·arctan(|bulge|)
радиус дугиr = хорда ÷ (2·sin(θ ÷ 2))

Дальше — та же формула L = r·θ. РаскройОнлайн считает длину именно так для окружностей, дуг и дуговых сегментов полилиний. Эллипсы и сплайны (NURBS-кривые) под эти формулы не попадают — у них нет такой же простой зависимости длины от радиуса и угла, точный расчёт потребовал бы численного интегрирования; пока они по-прежнему считаются по ломаной линии.

Почему не все инструменты считают по формуле

Причина не в сложности формул — они простые. Причина в источнике данных для расчёта: чтобы отобразить чертёж на экране, кривые в любом случае разбиваются на отрезки — иначе их нельзя вывести на экран по пикселям. Многие инструменты используют для расчёта длины реза те же точки, что и для отрисовки, не храня отдельно радиус и угол каждой дуги. Такой подход проще в реализации и одинаково работает для любых кривых, но ценой точности.

РаскройОнлайн хранит оба набора данных: точки — для превью на экране, и параметры дуг (радиус, угол, bulge) — отдельно, для расчёта длины. Это усложняет реализацию, но не увеличивает время вычислений.

Разница на реальном примере

На тестовом чертеже с полилинией из дуговых сегментов (один из наших проверочных файлов) разница между двумя способами подсчёта такая:

Способ расчётаДлина реза
Ломаная линия (приближение)417,03 мм
Аналитический расчёт (точное значение)417,08 мм

Разница — меньше 0,05 мм на один контур, около 0,01%. На чертеже с одной деталью это несущественно, но на чертеже с сотнями отверстий и дуг такая погрешность складывается с каждой из них и может сдвинуть итоговую длину реза на заметную величину — а она напрямую определяет цену по прайсу «за метр реза».