3.4 Пример простого квадратичного В-сплайна

Рассмотрим пример другого В-сплайна. Рассмотрим квадратичный (третьего порядка) В-сплайн, показанный на рис.3.4, определённый тремя вершинами определяющего многоугольника. Как мы уже поняли из предыдущего примера, чтобы определить квадратичную кривую нужно три точки, и что в данном случае существует единственный квадратичный интервал. Открытый узловой вектор будет иметь вид [0,0,0,1,1,1]. Возможно, вы заметили, что существует связь между числом вершин определяющего многоугольника и числом узлов узлового вектора. Для В-сплайнов в общем случае, число узлов равняется числу вершин определяющего многоугольника плюс порядок кривой. Как было замечено в предыдущем примере, многозначность узлов нужна для того, чтобы концы кривой совпадали с крайними вершинами определяющего многоугольника


Рис.3.4 Пример простого квадратичного В-сплайна

Вычислим значение кривой при параметре u=0.5. Как уже упоминалось, этот процесс состоит из серии линейных интерполяций. Проинтерполируем первую наклонную посередине длины. То же самое проделаем и со второй наклонной. Получим две точки. Соединяя их, получим новую наклонную. Проинтерполируем ёе посередине длины, получим значение кривой при u=0.5. Заметьте, что пришлось всего две интерполяции, чтобы вычислить значение кривой, и в общем случае нужно столько интерполяций, какова степень кривой. Подобную процедуру можно провести для вычисления значения кривой при любом значении u. Конечно, это всего лишь графический метод решения подобной задачи. Существуют также математические методы для решения этой проблемы (такие как метод Кокса-ДеБура), которые и используются в FastShip. Однако, графический метод полезен для более полного понимания математики NURBS, а также для демонстрации ряда важных свойств NURBS.

 

3.5 Пример простого линейного В-сплайна

Рис.3.5. Пример простого линейного В-сплайна

В качестве последнего примера рассмотрим линейный В-сплайн, показанный на рис.3.5. Определяющий многоугольник состоит из трёх вершин, обозначенных B0, B1, и B2. Что можно сказать об этой линейной кривой? Мы знаем, что нужно две точки, чтобы определить линию, так что здесь должно быть два линейных интервала. В узловом векторе нужно иметь три узла, чтобы определить два интервала, один - в начале, другой - в конце, третий - между первыми двумя. Для многих поверхностей, с которыми вы будете работать в FastShip, используется стандартный узловой вектор. Это значит, что внутренний узел находится на равном расстоянии, как от первого узла, так и от последнего. В дальнейшем мы будем рассматривать нестандартные узловые векторы. Следовательно, в данном примере узловой вектор будет иметь вид [0,0.5,1]. Тогда открытый узловой вектор с соответствующей многозначностью будет иметь вид [0,0,0.5,1,1]. Чтобы вычислить значение кривой при u=0.25 нужно рассмотреть наклоную B0B1, имеющие соответственно значения 0 и 0.5, и интерполировать эту наклонную посередине длины. Выясняется, что фактически для линейного В-сплайна определяющий многоугольник и линейный В-сплайн совпадают.

 

3.6 В-сплайн кривые против традиционных кривых интерполирования

 

Интерполирующая кривая

Многие из Вас работали с интерполирующими кривыми в том или ином виде, " кубическими сплайнами ", используемыми во многих приложениях для интерполирования между дискретным набором заданных точек. Чем эти кривые отличаются от В-сплайнов и почему они не используются в FastShip? Этот пункт рассказывает об основных различиях между использованием интерполирующих кривых и В-сплайнов в отношении проектирования.

Рассмотрим только случай сплайна четвертого порядка или третьей степени, так как эти функции ведут себя как большинство материалов, из которых построено судно. Воспользуемся рисунком 3.6 .Рассуждения начнем с пространственных кривых и затем перейдём к поверхностям.

 

Рис.3.6. Интерполирующая кривая против В-сплайна

Принципиальное разница между кубическим В-сплайном и параметрическим кубическим сплайном - это набор “ручек”, которыми проектировщик управляет кривой. В-сплайн использует вспомогательную контрольную сеть для вытягивания кривой, в то время как интерполирующий сплайн использует узлы, чтобы непосредственно определить положение кривой в пространстве.

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

Рисунок 3.6 показывает два В-сплайна, каждый состоящий из пяти контрольных точек, у каждого из них серединная точка смещена вертикально вверх. Заметьте совершенно разные полученные кривые. Интерполирующий сплайн действительно проходит через все контрольные точки, но непредсказуемо колеблется между определяющей линией , в то время как В-сплайн фактически не проходит через контрольные вершины, но более гладко повторяет контрольную сеть. Стоит также отметить, что если бы кривая в примере содержала большее количество контрольных точек на конце кривой, полученный В-сплайн остался бы прежним, в то время как интерполирующий сплайн продолжил бы затухающие колебания вплоть до к конца кривой. Отсюда следует два важных свойства В-сплайнов. Первое, при движении определяющей контрольной сетки В-сплайн может перемещаться только в направлении параллельном движению контрольной точки на величину, зависящую от близости к сдвигаемой контрольной точке. Второе, контрольная точка на кривой имеет ограниченный интервал влияния, т.е. при движении одной контрольной точки изменения в форме кривой будут иметь локальный характер. Этих свойств совершенно нет у интерполирующих сплайнов, которые должны проходить через контрольные точки. Фактически, можно показать, что воздействие от движения одной контрольной точки влияет по всей длине кривой, и что изменения формы кривой колебательны по своей природе. Манипулируя контрольной сетью В-сплайна при движении одной точки сети, сдвигается не один узел. Возвращаясь к рис.3.6, можно увидеть, что серединный узел, соответствующий сдвигаемой контрольной точке, сдвинулся на 2/3 расстояния контрольной точки, а два смежных узла сдвинулись параллельно на 1/6 расстояния. Смещения двух последних узлов оказалось достаточно, чтобы кривая сама устранила осцилляции. Проектировщик, использующий интерполирующие сплайны мог бы создать идентичную кривую, сдвинув три узла в заданные положения, но такая точность нежелательна. Аналогично проектировщик мог бы создать кривую путём интерполирования, используя В-сплайны, но для этого ему потребовалось бы создать колебательную сеть.

Неотъемлемой частью всего вышесказанного является предоставление читателю выбора “рабочего инструмента” для построения кривых и поверхностей. Имеющееся в наличии небольшое количество программного обеспечения по морской технике использует и те и другие виды сплайнов. FastShip в качестве инструмента для создания поверхностей выбрал В-сплайны с контрольной сетью с предопределёнными или интерактивно определяющимися граничными условиями. Некоторые программы, использующие В-сплайны сперва конструируют поперечные сечения, а затем сглаживают их в продольном направлении, проводя интерполирующую функцию через контрольные точки сечений. Очевидно, небольшие изменения в поперечных сечениях могут отразиться в колебательном отношении на всей длине спроектированного судна. При этом подходе небольшие изменения никогда не будут локальными.

  3.7 Дополнительный контроль

Теперь обратим внимание на проблему дополнительного контроля над В-сплайн кривой или поверхностью.При использовании FastShip часто случается, что пользователь нуждается в дополнительном контроле над формой поверхности. Очевидным средством для дополнительного контроля является добавление вершин в контрольный многоугольник. Как мы уже знаем, этим подразумевается добавление значений к узловому вектору. В FastShip используются два различных подхода для дополнительного контроля над поверхностью. Первый – это функция insert-net, а второй-функция insert-knot . Рассмотрим вкратце каждый из них.


Рис. 3.7. Дополнительный контроль посредством функции insert – net.

Рис.3.7. показывает использование функции insert-net для дополнительного контроля. Рассмотрим кубический В-сплайн, состoящий из четырёх вершин определяющего многоугольника(единственный интервал) и открытый стандартный узловой вектор. Мы хотим вставить точку в определяющую сеть посередине кривой, чтобы лучше контролировать поверхность в данном месте.

Рис.3.8. Дополнительный контроль с помощью функции insert – knot.

Функция insert-net сохраняет все существующие вершины многоугольника на своих позициях и вставляет определённым образом новую вершину в многоугольник, а также добавляет значение узла в узловой вектор, чтобы сохранить стандартность узлового вектора. В данном примере новая вершина была вставлена посередине между второй и третьей вершиной, и было добавлено новое значение узла 0.5. (Заметьте, что в FastShip новый узловой вектор будет иметь вид {0,0,0,0,1,2,2,2,2} т.к. FastShip поддерживает интегральные значения узлов). Теперь, если мы будем использовать уже изученные приёмы для вычисления значения кривой с дополнительным контролем, то обнаружим, что она слегка отличается от исходной кривой. Но мы же дополнительно проконтролировали поверхность. Секрет здесь в том, что команда insert-net не сохраняет форму кривой, но сохраняет стандартность узлового вектора.

Теперь обратимся к рис.3.8. для рассмотрения операции insert-knot дополнительного контроля. Начнём всё с того же В-сплайна, показанного в нижней части рисунка. Пользователь определяет в каком месте он хочет вставить узел, в данном примере при значении параметра 0.75. Узловой вектор соответственно изменяется и добавляется новая вершина. Однако в этом случае некоторые вершины многоугольника перемещаются со своих первоначальных позиций. Используется приём, описанный ранее, когда вершины определяются осреднением узлового вектора и новый многоугольник создаётcя, как показано справа на рисунке. Секрет здесь в том, что insert-knot сохраняет форму кривой, но не сохраняет стандартности узлового вектора. Фактически за исключением отдельных случаев единственного интервала узлового вектора невозможно вставить узел в стандартный многоинтервальный узловой вектор, при этом сохранить его стандартность.


3.8 Что значит “рациональный”?

До сих пор мы рассмотрели все части, которые составляют аббревиатуру NURBS за исключением одного “рациональность”. В-сплайн является рациональным, если каждой вершине его определяющего многоугольника соответствует своё значение веса точки. Вес точки можно рассматривать как силу влияния данной точки на кривую. Рассмотрим рис.3.9.

Рис.3.9. Рациональность В-сплайнов

Здесь мы пытаемся определить дугу круга в 900 используя квадратичный В-сплайн, заданный тремя вершинами многоугольника. Т.к. мы знаем что кривая приближается на своих концах к касательной, проведённой к конечным точкам наклонных, то для того, чтобы получить дугу 900 обе наклонных многоугольника должны быть перпендикулярны. Подгоняя многоугольник, как показано на рисунке, но оставляя веса точек равными 1, получается верхняя кривая, показанная на рисунке, очевидно, не круглой формы. Первым побуждением было бы сдвинуть вниз вершину В1 пока не получится фигура более круглой формы. Хотя этого могло быть и достаточно для приближения к круглой форме, это не может быть правильно по двум причинам. Первая, двигать вниз В1 означает, что две наклонные больше не будут перпендикулярными, т.е. касательные к конечным точкам кривой не могут быть перпендикулярными. Второе, и, возможно, более важное, ранее мы показали, что двигая вершину контрольной сети, все точки кривой двигаются в том же направлении, что и вершина, но на разные расстояния. Здесь же нам нужно, чтобы точки двигались от В1 в радиальном направлении. Это достигается изменением веса вершины В1. В данном примере вес точки уменьшили так, чтобы получился круг. Существует точное распределение весов определяющего многоугольника, которое позволяет получить круг. Хотя в определённых случаях это распределение легко вычисляется, оно не является общим случаем. Для большинства моделей, выполненных в FastShip, достаточным является приближённо построить круговую область, используя вершины со стандартными весами. Курс передового обучения FastShip предоставляет специальные примеры того, как использовать В-сплайны для получения круговых областей.

 


Информация о работе «Формирование математической модели корпуса теплохода-площадки в программе FastShip6»
Раздел: Информатика, программирование
Количество знаков с пробелами: 69253
Количество таблиц: 1
Количество изображений: 30

0 комментариев


Наверх