Главная страница
Навигация по странице:

  • 4.9.1. Метод трассировки лучей

  • 4.9.2. Метод z -буфера

  • 4.9.3. Алгоритмы упорядочения

  • Метод сортировки по глубине. Алгоритм художника

  • Метод двоичного разбиения пространства

  • 4.9.4. Метод построчного сканирования

  • 4.9.5. Алгоритм Варнака

  • 4.10.1. Сплайн-функции. Случай одной переменной

  • 4.10.2. Сплайновые кривые

  • 4.10.4. Сплайновые поверхности

  • ГРАФИЧЕСКИЙ ИНТЕРФЕЙС ОПЕРАТОРА. Учебное пособие для студентов специальности 220301 Москва 2011 2 Содержание


    Скачать 2.77 Mb.
    НазваниеУчебное пособие для студентов специальности 220301 Москва 2011 2 Содержание
    АнкорГРАФИЧЕСКИЙ ИНТЕРФЕЙС ОПЕРАТОРА.pdf
    Дата10.12.2017
    Размер2.77 Mb.
    Формат файлаpdf
    Имя файлаГРАФИЧЕСКИЙ ИНТЕРФЕЙС ОПЕРАТОРА.pdf
    ТипУчебное пособие
    #10835
    страница10 из 12
    1   ...   4   5   6   7   8   9   10   11   12
    4.9. Удаление невидимых граней
    Задача удаления невидимых граней является заметно более сложной, чем задача удаления невидимых линий, хотя бы по общему объему возникающей информации. Если практически все методы, служащие для удаления невидимых линий, работают в объектном пространстве и дают точный результат, то для удаления невидимых поверхностей существует большое

    113 число методов, работающих только в картинной плоскости, а также смешанных методов.
    4.9.1. Метод трассировки лучей
    Наиболее естественным методом для определения видимости граней является метод трассировки лучей (вариант, используемый только для определения видимости, без отслеживания отраженных и преломленных лучей обычно называется ray casting), при котором для каждого пикселя картинной плоскости определяется ближайшая к нему грань, для чего через этот пиксель выпускается луч, находятся все точки его пересечения с гранями и среди них выбирается ближайшая.
    Одним из преимуществ этого метода является простота, универсальность
    (он может легко работать не только с полигональными моделями; возможно использование Constructive Solid Geometry) и возможность совмещения определения видимости с расчетом цвета пикселя.
    Еще одним несомненным плюсом метода является большое количество методов оптимизации, позволяющих работать с сотнями тысяч граней и обеспечивающих временные затраты порядка O(C·log(n)), где С – общее количество пикселей па экране, a n – общее количество объектов в сцене. Более того, существуют методы, обеспечивающие практическую независимость временных затрат от количества объектов.
    4.9.2. Метод z-буфера
    Одним из самых простых алгоритмов удаления невидимых граней и поверхностей является метод z-буфера (буфера глубины), где для каждого пикселя, как и в методе трассировки лучей, находится грань, ближайшая к нему вдоль направления проектирования, однако здесь циклы по пикселям и по объектам меняются местами.
    Поставим в соответствие каждому пикселю (х, у) картинной плоскости кроме цвета с(х, у), хранящегося в видеопамяти, его расстояние до картинной плоскости вдоль направления проектирования z(x, у) (его глубину).
    Массив глубин инициализируется +∞, т.е. изначально (при отсутствии объектов сцены) в z-буфер записаны +1, соответствующие нормированной +∞.
    Для вывода на картинную плоскость произвольной грани она переводится в растровое представление на картинной плоскости и затем для каждого пикселя этой грани находится его глубина. В случае если эта глубина меньше значения глубины, хранящегося в z-буфере, пиксель рисуется и его глубина (в долях единицы) заносится в z-буфер.
    Метод z-буфера работает исключительно в пространстве картинной плоскости и не требует никакой предварительной обработки данных (рис. 113).
    Порядок, в котором грани выводятся на экран, не играет никакой роли.

    114
    Рис. 113. Удаление невидимых граней на картинной плоскости методом z-буфера
    Для экономии памяти можно отрисовывать не все изображение сразу, а рисовать по частям. Для этого картинная плоскость разбивается на части
    (обычно это горизонтальные полосы) и каждая такая часть обрабатывается независимо. Размер памяти под буфер определяется размером наибольшей из этих частей.
    Одним из основных недостатков z-буфера (помимо большого объема требуемой под буфер памяти) является избыточность вычислений: осуществляется вывод всех граней вне зависимости от того, видны они или нет.
    И если, например, данный пиксель накрывается десятью различными лицевыми гранями, то для каждого соответствующего пикселя каждой из этих десяти граней необходимо произвести расчет цвета. При использовании сложных моделей освещенности (например, модели Фонга) и текстур эти вычисления могут потребовать слишком больших временных затрат.
    0,543 0,316 0,121
    Картинная плоскость
    Z=1 (изначально точка в бесконечности)
    Z=0,543
    Z=0,121
    Z=0,316

    115
    4.9.3. Алгоритмы упорядочения
    Подход, использованный ранее для построения графика функции двух переменных и основанный на последовательном выводе на экран в определенном порядке всех граней, может быть успешно использован и для построения более сложных сцен.
    Тем самым методы упорядочения выносят сравнение по глубине за пределы циклов и производят сортировку граней явным образом. Методы упорядочения являются гибридными методами, осуществляющими сравнение и разбиение граней в объектном пространстве, а для непосредственного наложения одной грани на другую использующими растровые свойства дисплея.
    Упорядочим все лицевые грани таким образом, чтобы при их выводе в этом порядке получалось корректное изображение сцены. Для этого необходимо, чтобы для любых двух граней Р и Q та из них, которая при выводе может закрывать другую, выводилась позже. Такое упорядочение обычно называется back-to-front, поскольку сначала выводятся более далекие грани, а затем более близкие.
    Существуют различные методы построения подобного упорядочения.
    Вместе с тем нередки и случаи, когда заданные грани упорядочить нельзя (рис.
    114). Тогда необходимо произвести дополнительное разбиение граней так, чтобы получившееся после разбиения множество граней уже можно было упорядочить.
    Заметим, что две любые выпуклые грани, не имеющие общих внутренних точек, можно упорядочить всегда. Для невыпуклых граней это в общем случае неверно.
    Рис. 114. Пример изображения, которое нельзя упорядочить
    Метод сортировки по глубине. Алгоритм художника
    Этот метод является самым простым из методов, основанных на упорядочении граней. Как художник сначала рисует более далекие объекты, а затем поверх них более близкие, так и метод сортировки по глубине сначала упорядочивает грани по мере приближения к наблюдателю, а затем выводит их в этом порядке.
    Метод основывается на следующем простом наблюдении: если для двух граней А и В самая дальняя точка грани А ближе к наблюдателю (картинной

    116 плоскости), чем самая ближняя точка грани В, то грань В никак не может закрыть грань А от наблюдателя.
    Поэтому если заранее известно, что для любых двух лицевых граней ближайшая точка одной из них находится дальше, чем самая дальняя точка другой, то для упорядочения граней достаточно просто отсортировать их по расстоянию от наблюдателя (картинной плоскости).
    Однако такое не всегда возможно: могут встретиться такие пары граней, что самая дальняя точка одной находится к наблюдателю не ближе, чем самая близкая точка другой.
    На практике часто встречается следующая реализация этого алгоритма: множество всех лицевых граней сортируется по ближайшему расстоянию до картинной плоскости (наблюдателя) и потом эти грани выводятся в порядке приближения к наблюдателю. В качестве алгоритмов сортировки можно использовать либо быструю сортировку, либо поразрядную.
    Метод хорошо работает для целого ряда типичных сцен, включая, например, построение изображения нескольких непересекающихся простых тел.
    Расстояние от точки р до наблюдателя, расположенного в начале координат, при параллельном проектировании вдоль единичного вектора l задается следующей формулой:
    d = (р, l).
    Хотя подобный подход и работает в подавляющем большинстве случаев, однако возможны ситуации, когда просто сортировка по расстоянию до картинной плоскости не обеспечивает правильного упорядочения граней (рис. 115), – так, грань В будет ошибочно выведена раньше, чем грань А; поэтому после сортировки желательно проверить порядок, в котором грани будут выводиться.
    Предлагается следующий алгоритм этой проверки. Для простоты будем считать, что рассматривается параллельное проектирование вдоль оси Oz. Перед выводом очередной грани Р следует убедиться, что никакая другая грань Q, которая стоит в списке позже, чем Р, и проекция которой на ось Oz пересекается с проекцией грани Р (если пересечения нет, то порядок вывода Р и Q определен однозначно), не может закрываться гранью Р. В этом случае грань Р действительно должна быть выведена раньше, чем грань Q. Ниже приведены
    4 теста в порядке возрастания сложности проверки:
    1. Пересекаются ли проекции этих граней на ось Ох?
    2. Пересекаются ли проекции этих граней на ось Оу?
    Если хотя бы на один из этих двух вопросов получен отрицательный ответ, то проекции граней Р и Q на картинную плоскость не пересекаются и, следовательно, порядок, в котором они выводятся, не имеет значения. Поэтому будем считать, что грани Р и Q упорядочены верно. Для проверки выполнения этих условий очень удобно использовать ограничивающие тела. В случае, когда оба эти теста дали утвердительный ответ, проводятся следующие тесты.
    1. Находятся ли грань Р и наблюдатель по разные стороны от плоскости, проходящей через грань Q (рис. 116)?
    4. Находятся ли грань Q и наблюдатель по одну сторону от плоскости, проходящей через грань Р (рис. 117) ?

    117
    Рис. 115. Рис. 116 Рис. 117
    Примеры проверки последовательности вывода граней
    Если хотя бы на один из этих вопросов получен утвердительный ответ, то считаем, что грани Р и Q упорядочены верно, и сравниваем Р со следующей гранью.
    В случае, если ни один из тестов не подтвердил правильность упорядочения граней Р и Q, проверяем, не следует ли поменять эти грани местами. Для этого проводятся тесты, являющиеся аналогами тестов 3 и 4 (очевидно, что снова проводить тесты 1 и 2 не имеет смысла):
    3'. Находятся ли грань Q и наблюдатель по разные стороны от плоскости, проходящей через грань Р?
    4'. Находятся ли грань Р и наблюдатель по одну сторону от плоскости, проходящей через грань Q?
    В случае, если ни один из тестов 3, 4, 3', 4' не позволяет с уверенностью определить, какую из этих двух граней нужно выводить раньше, одна из них разбивается плоскостью, проходящей через другую грань и вопрос об упорядочении целой грани и частей разбитой грани легко решается при помощи тестов 3 или 4 (З' или 4').
    Возможны ситуации, когда несмотря на го, что грани Р и Q упорядочены верно, их разбиение все же будет произведено (алгоритм создает избыточные разбиения). Подобный случай изображен на рис. 118, где для каждой вершины указана ее глубина.
    Методу упорядочения присущ тот же недостаток, что и методу z-буфера, а именно необходимость вывода всех лицевых граней. Чтобы избежать этого, можно его модифицировать следующим образом: грани выводятся в обратном порядке – начиная с самых близких граней и заканчивая самыми далекими
    (front-to-back). При выводе очередной грани рисуются только те пиксели, которые еще не были выведены. Как только весь экран будет заполнен, вывод граней можно прекратить.
    Рис. 118. Пример упорядочения граней по глубине

    118
    Метод двоичного разбиения пространства
    Существует другой, довольно элегантный и гибкий способ упорядочения граней. Каждая плоскость в объектном пространстве разбивает все пространство на два полупространства. Считая, что эта плоскость не пересекает ни одну из граней сцены, получаем разбиение множества всех граней на два непересекающихся множества (кластера); каждая грань попадает в тот или иной кластер в зависимости от того, в каком полупространстве относительно плоскости разбиения эта грань находится.
    Ясно, что ни одна из граней, лежащих в полупространстве, не содержащем наблюдателя, не может закрывать собой ни одну из граней, лежащих в том же полупространстве, в котором находится и наблюдатель (с небольшими изменениями это работает и для параллельного проектирования).
    Для построения правильного изображения сцены необходимо сначала выводить грани из дальнего кластера, а затем из ближнего. Применим предложенный подход для упорядочения граней внутри каждого кластера. Для этого выберем две плоскости, разбивающие каждый из кластеров на два подкластера. Повторяя описанный процесс до тех пор, пока в каждом получившемся кластере останется не более одной грани (рис. 119).
    Получаем в результате двоичное дерево (Binary Space Partitioning Tree).
    Узлами этого дерева являются плоскости, производящие разбиение.
    Рис. 119. Пример двоичного разбиения пространства
    Пусть плоскость, производящая разбиение, задается уравнением (p, n)= d.
    Тогда если оказывается, что (p,n)>d, то это соответствует вершине поддерева, содержащейся в положительном полупространстве, а если (p,n), то – в отрицательном полупространстве. Обычно в качестве разбивающей плоскости выбирается плоскость, проходящая через одну из граней. Все грани, пересекаемые этой плоскостью, разбиваются вдоль нее, а получившиеся при разбиении части помещаются в соответствующие поддеревья.

    119
    Рис. 120. Разбиение граней на кластеры
    Пример. Рассмотрим сцену, показанную на рис. 120. Плоскость, проходящая через грань 5, разбивает грань 2 на части 2 1
    и 2 2
    , а грань 8 – на части 8 1
    и 8 2
    . При этом все множество образовавшихся граней распадается на два кластера: (1, 8 1
    , 2 1
    ) и (2 2
    , 3, 4, 6, 7, 8 2
    ). Выбрав для первого кластера новую плоскость разбиения, проходящую через грань 6, получим два подкластера: (7,
    8 2
    ) и (2 2
    , 3, 4). Каждое следующее разбиение будет выделять по одной грани из оставшихся кластеров. В результате получим BSP-дерево, показанное на рис.
    121.
    5 8
    1 1
    6 7
    8 2
    2 2
    3 2
    1 4
    Рис. 121. BSP-дерево для примера рис. 120
    4.9.4. Метод построчного сканирования
    Метод построчного сканирования является примером метода, удачно использующего растровые свойства картинной плоскости для упрощения исходной задачи и сведения ее к серии простых задач в пространстве меньшей размерности.

    120
    Все изображение на картинной плоскости (экране) можно представить как состоящее из горизонтальных (или вертикальных) линий пикселей – строк
    (или столбцов). Каждой такой строке пикселей соответствует сечение сцены плоскостью, проходящей через соответствующую строку и наблюдателя (для параллельного проектирования – проходящей через строку и параллельную направлению проектирования), при наших допущениях.
    Пересечением секущей плоскости со сценой будет множество непересекающихся (за исключением концов) отрезков, высекаемых на гранях секущей плоскостью (рис. 122).
    В результате мы приходим к задаче удаления невидимых частей для отрезков на секущей плоскости при проектировании на прямую, являющуюся результатом пересечения с ней картинной плоскости. Тем самым получается задача с размерностью на единицу меньше, чем исходная задача, – вместо определения того, какие части граней закрывают друг друга при проектировании на плоскость, необходимо определить, какие части отрезков закрывают друг друга при проектировании на прямую.
    Существуют различные методы решения задачи удаления невидимых частей отрезков. Одним из наиболее простых является использование одномерного z-буфера, совмещающего крайнюю простоту с весьма небольшими затратами памяти даже при высоком разрешении картинной плоскости. К тому же существуют аппаратные реализации этого подхода. С другой стороны, для определения видимых частей можно воспользоваться и аналитическими (непрерывными) методами.
    Заметим, что изменение видимости отрезков может происходить лишь в их концах. Поэтому достаточно проанализировать взаимное расположение концов отрезков с учетом глубины.
    Рис. 122. Пример метода построчного сканирования
    4.9.5. Алгоритм Варнака
    Алгоритм Варнака является еще одним примером алгоритма, основанного на разбиении картинной плоскости на части, для каждой из которых исходная задача может быть решена достаточно просто. Разобьем видимую часть картинной плоскости на четыре равные части и рассмотрим,

    121 каким образом могут соотноситься между собой проекции граней и получившиеся части картинной плоскости.
    Возможны 4 различных случая:
    1. Проекция грани полностью накрывает область (рис. 123 а);
    2. Проекция грани пересекает область, но не содержится в ней полностью (рис.
    123 б);
    3. Проекция грани целиком содержится внутри области (рис. 123 в);
    4. Проекция грани не имеет общих внутренних точек с рассматриваемой областью (рис. 123 г).
    Рис. 123. Случаи пересечений проекций граней и картинной плоскости
    Очевидно, что в последнем случае грань вообще никак не влияет на то, что видно в данной области.
    Сравнивая область с проекциями всех граней, можно выделить случаи, когда изображение, получающееся в рассматриваемой области, определяется сразу:
    • проекция ни одной грани не попадает в область;
    • проекция только одной грани содержится в области или пересекает область; в этом случае грань разбивает всю область на две части, одна из которых соответствует этой грани;
    • существует грань, проекция которой полностью накрывает данную область, и эта грань расположена к картинной плоскости ближе, чем все остальные грани, проекции которых пересекают данную область; в этом случае вся область соответствует этой грани.
    Если ни один из рассмотренных трех случаев не имеет места, то снова разбиваем область на 4 равные части и проверяем выполнение этих условий для каждой из частей. Те части, для которых видимость таким образом определить не удалось, разбиваем снова и т. д. (рис. 124).
    Естественно возникает вопрос о критерии, на основании которого прекращать разбиение (иначе оно может продолжаться до бесконечности).
    В качестве очевидного критерия можно взять размер области: как только размер области станет не больше размера 1 пикселя, то производить дальнейшее разбиение не имеет смысла и для данной области ближайшая к ней грань определяется явно.
    a)
    б)
    в)
    г)

    122
    Рис. 124. Пример определения видимости грани методом Варнака
    4.10. Геометрические сплайны
    Историю сплайнов принято отсчитывать с 1946 года. Функции, подобные тем, что сейчас называют сплайнами, были известны математикам давно, начиная как минимум с Леонарда Эйлера, но их интенсивное изучение началось, фактически, только в середине XX века. В 1946 году Исаак Шёнберг впервые употребил этот термин в качестве обозначения класса полиномиальных сплайнов. Сначала сплайны рассматривались как удобный инструмент в теории и практике приближения функций. Однако довольно скоро область их применения начала быстро расширяться и обнаружилось, что существует очень много сплайнов самых разных типов. Сплайны стали активно использоваться в численных методах, в системах автоматического проектирования и автоматизации научных исследований, во многих других областях человеческой деятельности и, конечно, в компьютерной графике.
    Сам термин «сплайн» происходит от английского spline. Именно так называется гибкая стальная полоска, при помощи которой чертежники проводили через заданные точки плавные кривые. В былые времена подобный способ построения плавных обводов различных тел, таких, как, например, корпус корабля, кузов автомобиля, а потом фюзеляж или крыло самолета, был довольно широко распространен в практике машиностроения. В результате форма тела задавалась при помощи набора очень точно изготовленных сечений
    – плазов. Появление компьютеров позволило перейти от этого, плазово- шаблонного, метода к более эффективному способу задания поверхности обтекаемого тела. В основе этого подхода к описанию поверхностей лежит использование сравнительно несложных формул, позволяющих

    123 восстанавливать облик изделия с необходимой точностью. Ясно, что для большинства тел, встречающихся на практике, вряд ли возможно отыскание простых универсальных формул, которые описывали бы соответствующую поверхность глобально, то есть, как принято говорить, в целом. Это означает, что при решении задачи построения достаточно произвольной поверхности обойтись небольшим количеством формул, как правило, не удается. Вместе с тем аналитическое описание (описание посредством формул) внешних обводов изделия, то есть задание в трехмерном пространстве двумерной поверхности, должно быть достаточно экономным. Это особенно важно, когда речь идет об обработке изделий на станках с числовым программным управлением. Обычно поступают следующим образом: задают координаты сравнительно небольшого числа опорных точек, лежащих на искомой поверхности, и через эти точки проводят плавные поверхности. Именно так поступает конструктор при проектировании кузова автомобиля (ясно, что на этой стадии процесс проектирования сложного объекта содержит явную неформальную составляющую). На следующем шаге конструктор должен получить аналитическое представление для придуманных кривых или поверхностей. Вот для таких задач и используются сплайны.
    Средства компьютерной графики, особенно визуализация, существенно помогают при проектировании, показывая конструктору, что может получиться в результате, и, давая ему многовариантную возможность сравнить это с тем, что сложилось у него в голове.
    Достаточно типичной является следующая задача: по заданному массиву точек на плоскости (2D) или в пространстве (3D) построить кривую либо проходящую через все эти точки (задача интерполяции), либо проходящую вблизи от этих точек (задача сглаживания).
    Совершенно естественно возникают вопросы:
    1) в каком классе кривых искать решение поставленной задачи?
    2) как искать?
    4.10.1. Сплайн-функции. Случай одной переменной
    Вначале определим допустимый класс кривых. Он должен быть таким, чтобы: а) решение было единственным; б) построенная кривая изменялась плавно.
    Пусть на плоскости задан набор точек
    m
    i
    y
    x
    i
    i
    ,
    ,
    0
    ),
    ,
    (


    , таких, что они упорядочены следующим образом:
    m
    x
    x
    x




    1 0
    , т. е. точки пронумерованы в порядке возрастания вдоль оси Ox, это позволяет искать кривую в классе графиков функций.

    124
    Прежде всего, можно воспользоваться представлением графика функции в виде многочлена. Например, существует интерполяционный многочлен
    Лагранжа:






    m
    i
    i
    m
    i
    m
    i
    m
    x
    x
    x
    x
    y
    x
    L
    0
    )
    (
    )
    (
    )
    (
    )
    (


    , где




    m
    j
    j
    m
    x
    x
    x
    0
    )
    (
    )
    (

    График этого полинома (многочлена) проходит через все заданные точки
    (рис. 125). Многочлен однозначно определяется набором своих коэффициентов, число которых совпадает с количеством точек в заданном наборе (m+1).
    Рис. 125. Полином Лагранжа порядка 5.
    Недостатки:
    1. Степень многочлена Лагранжа равна m, если заданных точек (m+1), поэтому чем больше точек, тем больше степень полинома Лагранжа, и хотя он гарантированно пройдет через все заданные точки, но если его порядок велик, то отклонение от ожидаемых значений в промежутках между ними может быть существенным.
    2. Изменение всего лишь одной точки требует полного пересчета коэффициентов интерполяционного многочлена, при этом вид кривой может существенно измениться.
    С другой стороны, самый простой способ построения искомой кривой – соединение точек набора прямолинейными отрезками. При этом получается ломаная. При такой кусочно-линейной интерполяции нужно найти всего 2m чисел, но при этом мы не получаем необходимой гладкости кривой (с математической точки зрения в точках сопряжения отрезков прямой первые производные терпят разрыв).
    Нужно найти класс функций, которое сохранили бы достоинство простоты (сравнительно небольшое количество вычислений) при отсутствии вышеуказанных недостатков. Для этого используют многочлены, но строят их последовательно – звено за звеном. В результате получается полиномиальный
    многозвенник. При этом важно выбрать степень используемых многочленов и
    x
    0
    x
    1
    x
    2
    x
    3
    x
    m
    y
    0
    y
    1
    y
    2
    y
    m
    x
    y

    125 тщательно подобрать коэффициенты многочленов из условий гладкого сопряжения соседних звеньев то, что получается в результате такого подхода и называется сплайн–функцией или просто сплайном:
    )
    (x
    S
    y

    Сплайн–функция S(x) обладает следующими свойствами:
    С довольно большой точностью часть графика функции между двумя любыми соседними опорами (точками) можно приблизить к многочленам 3-ей степени и на всём промежутке от x
    0
    до x
    m
    эта функция дважды непрерывно дифференцируема. Такая функция относится к интерполяционным кубическим сплайнам.
    Интерполяционный кубический сплайн – это функция S(x), обладающая следующими свойствами:
    1) График функции проходит через каждую точку заданного массива
    m
    i
    y
    x
    S
    i
    i
    ,
    ,
    0
    )
    (
    ,



    2) На каждом из отрезков
    1
    ,
    ,
    0
    ,
    ,
    1



    m
    i
    x
    x
    i
    i

    функция является многочленом 3-ей степени





    3 0
    )
    (
    )
    (
    )
    (
    j
    j
    i
    i
    j
    x
    x
    a
    x
    S
    3) На всём отрезке от х
    0
    до х
    m
    функция S(x) имеет непрерывную производную.
    На каждом отрезке сплайн S(x) определяется четырьмя коэффициентами, поэтому для полного построения сплайна на всём большом отрезке надо найти
    4m чисел.
    Третье условие будет выполнено, если потребовать непрерывность сплайна во всех внутренних узлах x
    i
    (i =1,2,…m-1) это даёт m-1 условие на коэффициент. Ещё m-1 условие даёт требование непрерывности первой производной во внутренних узлах и ещё m-1 – второй.
    Всего получается 4m–2 условий на коэффициенты. Недостающие 2 условия для полного определения коэффициентов получают, например, задавая значение 1-ых производных на концах отрезков:
    )
    (
    ,
    )
    (
    0 0
    m
    m
    l
    x
    S
    l
    x
    S




    Эти условия называются граничными.
    4.10.2. Сплайновые кривые
    Будем использовать параметрические уравнения кривой. Параметрически заданной кривой называется множество γ точек М (х, у, z), координаты х, у, z которых определяются соотношениями:
    )
    (
    ),
    (
    ),
    (
    t
    z
    z
    t
    y
    y
    t
    x
    x



    , которые называются параметрическими уравнениями кривой γ, где x(t), y(t), z(t) функции, непрерывные на заданном интервале a≤t≤b.

    126
    Если ввести новую переменную
    a
    b
    a
    t
    u



    , то можно представить, что a=0, b=1, т. е. осуществить нормализацию параметров функции.
    Часто используют векторную форму записи параметрических уравнений:
    1 0
    ,
    )
    (
    )
    (
    )
    (
    )
    (













    t
    t
    z
    t
    y
    t
    x
    t
    r
    Параметр t задает ориентацию параметризованной кривой r(t) (порядок прохождения точек при монотонном возрастании параметра).
    Дальше можно задавать первую производную кривой и если
    0
    )
    (

    t
    r
    в каждой точке, то кривая называется регулярной, т. е. в каждой точке кривой существует касательная.
    4.10.3. Сглаживающие кривые. Кривая Безье
    Кривой Безье, определяемой массивом V (рис. 126), называется кривая, определяемая векторным уравнением:
     









    m
    i
    i
    i
    m
    i
    i
    m
    t
    V
    t
    t
    C
    t
    0 1
    ,
    0
    ,
    )
    1
    (
    )
    (
    r
    , где
    )!
    (
    !
    !
    i
    m
    i
    m
    C
    i
    m


    биномиальный коэффициент. В комбинаторике C
    i
    m
    дает число сочетаний из m элементов по i.
    Кривая Безье обладает замечательными свойствами:
    1) она является гладкой кривой;
    2) начинается в точке V
    0
    и заканчивается в точке V
    m
    , касаясь при этом отрезков
    V
    0
    V
    1
    , и V
    m-1
    V
    m
    контрольной ломаной;
    3) функциональные коэффициенты C
    i
    m
    t
    i
    (1-t)
    m-i
    при вершинах V
    i
    , i=0,I,....m, представляет собой универсальные многочлены (многочлены Бернштейна); они неотрицательны, и их сумма равна единице:












    m
    i
    m
    i
    m
    i
    i
    m
    t
    t
    t
    t
    С
    0 1
    )
    1
    (
    )
    1
    (
    Рис. 126. Кривая Безье, построенная по заданной последовательности массива точек V
    V0
    V1
    V2
    V3
    V4
    V5
    V6

    127
    Поэтому кривая Безье целиком лежит в выпуклой оболочке, порождаемой массивом точек.
    При m=3 получаем элементарную кубическую кривую Безье, определяемую четверкой точек V
    0
    , V
    1
    , V
    2
    , V
    3
    и описываемую векторным параметрическим уравнением:




     
    1
    ,
    0
    ,
    )
    1
    (
    3
    )
    1
    (
    3
    )
    1
    (
    )
    (
    3 3
    2 2
    1 0














    t
    V
    t
    t
    V
    t
    t
    V
    t
    V
    t
    t
    r
    Порядок точек в заданном наборе влияет на вид кривой Безье (рис. 127).
    Рис. 127. Примеры построения кривых Безье в зависимости от порядка задания вершин массива
    Действительно кривая Безье является сглаживающей, а не интерполяционной, так как проходит не через все точки заданного массива, а только через начальную и конечную точки.
    4.10.4. Сплайновые поверхности
    Сплайновая поверхность является расширением понятия сплайновой кривой. Сплайн-функция S(x) становится двухмерной S(x,y), сохраняя при этом свои основные свойства: непрерывность и гладкость. Так распространение интерполяционых кубических сплайнов на двухмерный случай позволяет получать гладкие поверхности практически любой формы. Сплайновые поверхности значительно улучшают фотореалистичность объектов, создаваемых средствами компьютерной графики, в частности по сравнению с полигональными моделями. При этом математическое описание усложняется не намного.

    128
    1   ...   4   5   6   7   8   9   10   11   12


    написать администратору сайта