Ломаная линия и аналитический расчёт длины дуг
Два способа посчитать длину дуги или окружности на чертеже дают разные числа. Разбираем, почему, и насколько это расходится на реальном примере.
Что такое ломаная линия
Прямые отрезки на чертеже — линии от точки до точки — всегда считаются точно: расстояние между двумя точками не нужно ничем приближать, формула одна и даёт точный ответ. Проблема возникает только с кривыми: дугами, окружностями и дуговыми сегментами полилиний.
Многие программы, которые считают длину реза, не умеют работать с кривыми напрямую. Вместо этого дуга разбивается на несколько коротких прямых отрезков — ломаную линию, повторяющую форму дуги, — а длина дуги приближённо считается как сумма длин этих отрезков.
Прямая линия между двумя точками дуги всегда короче самой дуги — она «срезает угол». Чем больше отрезков в ломаной, тем ближе результат к истине, но точным он не станет никогда — а чем больше отрезков, тем больше вычислений.
Что такое аналитический расчёт
У окружности и дуги есть точная формула длины — через радиус и угол, без разбиения на отрезки и без накопленной погрешности:
Отдельный случай — дуговой сегмент полилинии. В формате DXF у полилинии нет отдельного объекта «дуга»: вместо этого у обычной вершины есть необязательный параметр bulge («выпуклость») — число, которое говорит «segment до следующей вершины — не прямая, а дуга с такой-то кривизной». Если bulge не задан (большинство вершин), сегмент — обычная прямая и считается точно безо всяких формул. Если задан — угол и радиус дуги восстанавливаются из bulge и длины хорды:
Дальше — та же формула L = r·θ. РаскройОнлайн считает длину именно так для окружностей, дуг и дуговых сегментов полилиний. Эллипсы и сплайны (NURBS-кривые) под эти формулы не попадают — у них нет такой же простой зависимости длины от радиуса и угла, точный расчёт потребовал бы численного интегрирования; пока они по-прежнему считаются по ломаной линии.
Почему не все инструменты считают по формуле
Причина не в сложности формул — они простые. Причина в источнике данных для расчёта: чтобы отобразить чертёж на экране, кривые в любом случае разбиваются на отрезки — иначе их нельзя вывести на экран по пикселям. Многие инструменты используют для расчёта длины реза те же точки, что и для отрисовки, не храня отдельно радиус и угол каждой дуги. Такой подход проще в реализации и одинаково работает для любых кривых, но ценой точности.
РаскройОнлайн хранит оба набора данных: точки — для превью на экране, и параметры дуг (радиус, угол, bulge) — отдельно, для расчёта длины. Это усложняет реализацию, но не увеличивает время вычислений.
Разница на реальном примере
На тестовом чертеже с полилинией из дуговых сегментов (один из наших проверочных файлов) разница между двумя способами подсчёта такая:
| Способ расчёта | Длина реза |
|---|---|
| Ломаная линия (приближение) | 417,03 мм |
| Аналитический расчёт (точное значение) | 417,08 мм |
Разница — меньше 0,05 мм на один контур, около 0,01%. На чертеже с одной деталью это несущественно, но на чертеже с сотнями отверстий и дуг такая погрешность складывается с каждой из них и может сдвинуть итоговую длину реза на заметную величину — а она напрямую определяет цену по прайсу «за метр реза».