Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Curves.doc
Скачиваний:
51
Добавлен:
01.09.2019
Размер:
4.51 Mб
Скачать

Алгоритм De Boor для Кривых nurbs

Алгоритм De Boor также работает для кривых NURBS. Просто умножаем каждую контр. точку на ее вес, преобразуя тем самым кривую NURBS в 4х-мерный B-spline, проводим вычисления по алгоритму de Boor над этой кривой B-spline, и затем проецируем ее обратно на 3D - пространство при помощи деления первых трех координат на четвертую.

Основные Понятия

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

f(u,v) = ( x(u,v), y(u,v), z(u,v) ),

где параметры u и v находятся в определенных границах. Для нашей цели мы будем брать значения u и v в пределах от 0 до 1. Таким образом, (u,v) - это точка в квадрате, определяемом точками (0,0), (1,0), (0,1) и (1,1) на коорд. плоскости uv. Следующий рисунок иллюстрирует это понятие.

Неявные поверхности, с другой стороны, определяются многочленом с тремя переменными:

p(x,y,z) = 0

Как и в случае с кривыми, если x(u,v), y(u,v) и z(u,v) - это многочлены, то параметрические поверхности не смогут описывать многие поверхности, которые могут быть описаны в неявном виде. Хороший пример - сфера. Можно легко проверить этот факт с помощью доказательства, использовавшегося в случае с окружностями. Если x(u,v), y(u,v) и z(u,v) - это рациональные многочлены (т.e. частное двух многочленов), то параметрические поверхности могут описывать сферы, эллипсоиды и многие другие поверхности. Тем не менее, как и кривые, многие неявные поверхности не имеют параметрической формы. Образно говоря, неявные поверхности "сильнее" параметрических.

Вот несколько технических терминов. Поверхности, имеющие вид многочлена (неявные) называются алгебраическими поверхностями. Высшая степень из всех членов многочлена - это степень алгебраической поверхности. Таким образом, сферы и все квадратичные поверхности - это алгебраические поверхности второй степени, а, например, тор - это алгебр. поверхность 4 степени. Далее показана алгебр. пов-ть 3 степени, неявное уравнение которой

8x2 - xy2 + xz2 + y2 + z2 - 8 = 0 :

Некоторые алгебр. пов-ти имеют рациональные параметрические формы, например, сферы и все квадратичные поверхности. Этот тип алгебраич. поверхностей называют рациональными алгебраическими поверхностями. Теоретически, если дана алгебраич. поверхность в рациональной параметрической форме, всегда можно избавиться от параметров u и v, чтобы результат был в неявном виде. Этот процесс (перевод из параметрического вида в неявный) называют имплиситизацией (гы гы. Ну как словечко? хе хе - прим. перев.) ( implicitization ). Тем не менее, не все алебраические поверхности являются рациональными. К сожалению, проверить, является ли алгебраическая поверхность рациональной, очень сложно, не смотря на то, что у алгебраической геометрии такие определяющие теоремы. С вычислительной точки зрения это невыполнимо.

Параметрические Поверхности

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

Для того, чтобы вычислить касательный и нормальный векторы в точке (u,v) на области определения, нам нужны частные производные. Пусть параметрическая поверхность определяется так:

Частные производные по u и v - это касательные векторы в точке f(u,v):

На картинке слева - касательный вектор в направлении u, а справа - касательный вектор в направлении v. Нормальный вектор в f(u,v), n(u,v), равен векторному произведению этих частных производных по правилу правой руки:

Участок параметрической поверхности можно считать объединением (бесконечного числа) кривых. Есть много способов составления таких объединений кривых; но самый простой способ - так называемые изопараметрические [isoparametric] кривые. Дана параметрическая поверхностьf(u,v), если u сделать фиксированной, скажем, 0.1, и изменять v, то получим кривую на поверхности, координата u которой постоянна. Это изопараметрическая кривая в направлении v для u = 0.1. Соответственно, приняв v постоянным, равным какому-то значению, и изменяя u, получим изопараметрическую криву, у которой направление v постоянно. Таким образом, принимая u фиксированным в 0, 0.1, 0.1, ..., 0.9 и 1, мы получим 11 изопараметрических кривых f(0,v), f(0.1,v), f(0.2,v), ..., f(0.9,v) и f(1,v). Эти кривые развертываются в поверхность, если изменять u от 0 до 1 непрерывно. Аналогично, параметрические кривые, полученные при непрерывном изменении v дадут поверхность. Следующий рисунок показывает несколько изопараметрических кривых в обоих направлениях.

Эти изопараметрические кривые могут помочь в расчете поверхности. Во многих приложениях параметрическая поверхность делится на треугольники или полигоны. Затем эти треугольники и полигоны можно эффективно расчитать с помощью существующих графических библиотек, таких как OpenGL или PHIGS PLUS.

Вместо разделения поверхности на треугольники может быть проще разделить на треугольники область определения (u,v). Мы можем разделить u-направление на m сегментов точками u0=0, u1, ..., ui, ..., um=1 и разделить v-направление на n сегментов точками v0=0, v1, ..., vj, ..., un=1. Область делится на m×n прямоугольников, каждый из которых, в свою очередь, можно поделить на два треугольника.

Пусть ui и ui+1 - это две последовательные разделительные точки в направлении u, а vj и vj+1 - в направлении v, как показано выше. Имеем прямоугольник с вершинами (ui,vj), (ui+1,vj), (ui+1,vj+1) и (ui,vj+1). Есть два способа разделить его на трегольники, так как у него две диагонали. Сделаем, как показано на рисунке. Первый треугольник определяется точками (ui,vj), (ui+1,vj) и (ui,vj+1), а второй треугольник - точками (ui+1,vj), (ui+1,vj+1) и (ui,vj+1).

Возьмем треугольник, определяемый точками (ui,vj), (ui+1,vj) и (ui,vj+1). Эти три точки переходят в три точки на поверхности f(ui,vj), f(ui+1,vj) и f(ui,vj+1) с нормальными векторами n(ui,vj), n(ui+1,vj) и n(ui,vj+1). Теперь у нас есть три грани, у каждой из которых есть нормальный вектор. Этих трех частей информации достаточно для получения гладкого треугольника [to render the triangle smoothly]. В результате у нас есть метод для получения параметрической поверхности. Или, если хотите, у нас есть метод для получения набора треугольников, который приближается к форме данной параметрической поверхности. Эта аппроксимация не очень хороша, так как может получить очень большое количество треугольников, а некоторые из них могут быть в неправильных местоположениях, или, например, слишком маленькими. Эту ситуацию может исправить техника "адаптации". С помощью этого метода динамически изменяются размеры, количество и положения треугольников.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]