Поиск

Кривизна линий и поверхностей.


Body lines DXF drawing.
Body lines DXF drawing.

Долгое время, когда в судостроении только начинали использовать системы САПР, у меня был один заказчик, которому я сглаживал поверхность корпуса судна. Это был новый заказчик, и я впервые делал эту работу для него. В то время мы могли общаться только по телефону и электронной почте. Как обычно, я старался делать свою работу как можно лучше. Когда все было закончено, я отправил ему теоретический чертеж и практический корпус в формате DXF. Внезапно я получил много замечаний о плохо сглаженных участках корпуса. Я просмотрел все заново и сделал линии еще более плавными, но ответ был тот же. Так продолжалось довольно долго, пока заказчик не распечатал линии на плоттере в большом масштабе. На бумаге все было нормально. Оказалось, что мой DXF проверяли на компьютере в AutoCAD. Чтобы оптимизировать вывод полилиний, AutoCAD уменьшает количество выходных точек кривой. В этом случае линии выглядят гранеными. Для точного отображения кривой необходимо было использовать команду «REGEN». Мой заказчик не знал об этом. Это был первый случай, когда неправильный метод был использован для контроля формы кривых.


Несколько лет спустя один из моих клиентов решил использовать Rhinoceros для проверки плавности линий практического корпуса. Загрузив мой DXF и преобразовав все кривые в b-сплайны, он исследовал кривизну и обнаружил волнистость на некоторых линиях. Я был очень удивлен, потому что в ShapeMaker есть возможность отображения линий перегибов на поверхности и все нежелательные перегибы удаляются на начальном этапе сглаживания поверхности. Как и в первом случае, я предложил напечатать чертеж на бумаге и проверить гладкость на глаз. В случае отображения на плоттере графика, преобразованного в сплайны, была заметна небольшая волнистость. На оригинальном рисунке этих проблем не было. В чем проблема? Когда я сглаживаю корпус в ShapeMaker, я работаю непосредственно с поверхностью. В этом случае сечения и графики их кривизны рассчитываются как характеристики точки поверхности. При переносе сечений поверхности в файл DXF ShapeMaker вычисляет линию пересечения как большой набор точек, который затем интерполируется набором дуг и линий с заданной точностью. Если вы интерполируете полилинию DXF с помощью b-сплайновой кривой, результат может отличаться от полилинии и, особенно, от участков исходной поверхности.


Curvature of lines projected to surface.
Кривизна линий спроецированных на поверхность.

Почему это происходит? В математике существует два метода построения b-сплайновой кривой, проходящей через набор точек - аппроксимация и интерполяция. Отличие этих методов только в том, что при аппроксимации кривая проходит на минимальном расстоянии от точек, а при интерполяции b-сплайн-кривая проходит через каждую точку. Любой из алгоритмов сглаживания для набора точек является либо чистой аппроксимацией, либо интерполяцией, либо комбинацией этих двух методов. Задача большинства этих алгоритмов - минимизировать отклонение от исходных точек, и гладкость кривой в этом случае не критична. Поэтому визуально кривая может выглядеть неплохо, но если вы изучите кривизну такой кривой b-сплайна, вы увидите резкие скачки кривизны. Кривизна более чувствительна к изменению формы кривой. Как минимум, в пределах доли миллиметра, изменения положения контрольной точки b-сплайна достаточно, чтобы вызвать резкое изменение формы графика кривизны. Это особенно заметно, если узлы кривой b-сплайна расположены неравномерно. В случае, когда расстояние между узлами небольшое, минимального отклонения узла от исходной кривой достаточно, чтобы получить скачок кривизны в этой области. В этом случае он будет визуально практически не заметен глазу. Так что в этом случае исследование кривизны не даст достаточно объективной информации о форме участка поверхности.


Я сделал несколько тестов в ShapeMaker. Первое изображение показывает кривизну сечения непосредственно с поверхности. Второй показывает кривизну линии, спроецированной на поверхность в том же месте, что и первый.


Curvature from surface.
Кривизна с поверхности.

Curvature from line on surface for the same section.
Кривизна кривой спроецированной на поверхность в том же месте, что и в первом случае.

В целом она довольно близка к исходной кривизне, но в некоторых местах кривизна линии имеет более резкие пики. Кривизна проецируемой линии очень сильно зависит от точности интерполяции. В нашем случае точность

составила 1 Е-9 мм.


Большинство систем САПР используют математическую точность поверхности при импорте поверхности корпуса. Любой инструмент САПР позволяет построить участок поверхности, но и в этом случае нужно быть осторожным. Если результатом построения сечения является b-сплайн кривая, то возникает ситуация, эквивалентная описанной выше. Кривизна этого сплайна будет рассчитана на основе геометрии кривой, а не геометрии поверхности. В любом случае результат не всегда будет соответствовать действительности, особенно в узлах b-сплайна, которые расположены близко друг к другу.

56 просмотров0 комментариев

Недавние посты

Смотреть все