Икосаэдр из бумаги. Как сделать икосаэдр из бумаги

Уровень сложности: Непросто

Что вам понадобится:

  • Лист бумаги или картона
  • Линейка, карандаш, циркуль, ластик
  • Ножницы
  • Клей ПВА

1 шаг

Все неимоверно просто, так просто, что можно описать все в одном предложении. Взгляните на рисунок – это один из развернутых вариантов поверхности фигуры. Вы можете расчертить этот разворот на листке бумаги по схеме или же, если не хотите отчерчивать каждую из 30 граней самостоятельно, попросить ваш (или вашего соседа) принтер нарисовать схему для вас. Имейте в виду, что треугольники у икосаэдра правильные, то есть равносторонние. Их стороны очень удобно отмерять циркулем.

2 шаг

Теперь возьмите в руки ножницы и вырежьте по краю фигуру, намеченную на бумаге. Будьте аккуратны и не спешите – отрезав лишнего вы рискуете попортить внешний вид будущего вашего стереометрического чада.

3 шаг

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

4 шаг

Пора склеить плоскую фигуристую бумажку, перенеся ее во множество объектов пространства размерности 3. Для этого выберите какой-либо из крепежных элементов, нанесите на него тонкий слой клея, приблизьте его к соседнему треугольнику и прижмите секунд на 15-30. Аналогично склеиваются последующие места. Труднее всего заклеить последние два ребра – для этого понадобится сноровка и терпение. Площадочки для склеивания должны прижиматься к треугольникам изнутри, они должны быть упругими, для это их нужно согнуть не до конца и поддеть под поверхность икосаэдра.

5 шаг

Искусно сделаный икосаэдр

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

  • Сгибать _ровно_ бумагу и картон (особенно мелкие детали) очень удобно при помощи линейки, прижав ей нужную часть.
  • Бумажный икосаэдр можно разукрасить в разные цвета или наклеить цветную бумагу - тогда он будет выглядеть еще красивее, такой можно даже подарить кому-нибудь.

Икосаэдр – один из видов правильных многогранников. Он имеет выпуклую форму и характеризуется наличием 20 одинаковых граней, которые представляют собой равносторонние треугольники. Помимо этого данная объемная фигура содержит 12 вершин и 30 ребер.
Название фигуры в переводе с греческого означает «двадцать оснований». Такое имя фигуры полностью характеризует ее структурные особенности.
Подобные геометрические объекты редко встречаются в быту, поэтому наблюдать их можно лишь в каких-то игральных элементах, кристаллах разных минералов и в молекулярных соединениях. Также существует мнение, что данная фигура является более точной передачей форм Земли и некоторых планет.

Как сделать икосаэдр

Существует множество разнообразных, но простых способов, которые позволяют воссоздать икосаэдр собственными руками. Это позволит наглядно оценить всю таинственность и сложность данной фигуры.

Способ №1 Икосаэдр из готового макета

Первый способ сводиться к тому, чтобы найти в сети изображение развертки фигуры и подать ее на печать. После этого вырезать по конуру и сложить в соответствии с указанными линиями сгиба. Для предания большей эффективности, полученную фигуру можно разукрасить и покрыть лаком. Это позволит не только сделать икосаэдр более ярким и эффектным, но и продлить срок его жизни.

Способ №2 Как сделать икосаэдр вручную

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

Способ №3 Икосаэдр из полимерной глины – горшок для цветов

Данную фигуру можно легко использовать для создания интересных в плане дизайна вещей, например, горшка для цветов. К списку требуемых во втором способе инструментов, добавим полимерную глину и можно начинать изготовление. Из куска бумаги вырезаем треугольник. Его размеры зависят от размеров желаемого горшка. Далее по форме этого треугольника укладываем глину. Должно получится 15 глиняных треугольников. Далее складываем их в форме икосаэдра, верхнюю часть, оставляя пустой. Далее в нижней части, пока глина мягкая, делаем отверстия для стекания воды. Их не нужно слишком много. После этого крепим ножки, которые также изготавливаем из глины и отправляем наш горшок для цветов в печь. Там он приобретет достаточной прочности и будет радовать вас и ваших гостей. Его можно раскрасить, предав каждой грани собственный цвет либо подобрать цвета, которые будут гармонично сочетаться с интерьером помещения.

Таким же способом можно изготовить подсвечник или этажерку. В общем, все ограничивается только фантазией.

Одним из самых популярных направлений в оригами является 3D-моделирование. Создание объемных фигур захватывает внимание не только детей, но и взрослых. Если вы уже освоили простейшие схемы и техники и научились делать хотя бы куб из бумаги, можно переходить к более сложным моделям. Лучше всего практиковаться в создании так называемых "Платоновых тел". Их всего пять: тетраэдр, икосаэдр, гексаэдр, додекаэдр и октаэдр. Все фигуры представляют собой в основе которых лежат простейшие Сегодня вы узнаете, как сделать икосаэдр из бумаги.

Список материалов и инструментов

  • Один лист тонкого цветного картона (предпочтительная плотность - 220 г/м 2).
  • Острые ножницы или канцелярский ножик.
  • Простой НВ.
  • Длинная деревянная линейка (не менее 20 см).
  • Ластик.
  • Жидкий клей ПВА или карандаш.
  • Кисть.

Инструкция


Если вы полностью разобрались в том, как сделать икосаэдр из бумаги, можно попрактиковаться в сборке более сложной модели - усеченного икосаэдра. Эта фигура состоит из 32 граней: 12 равносторонних пятиугольников и 20 В готовом виде и при правильной раскраске она очень напоминает из бумаги. Принцип сборки аналогичный, различия только в шаблоне. Развертка усеченного икосаэдра очень сложна в построении, поэтому лучше распечатать ее на принтере. Бумагу стоит выбрать очень плотную, иначе фигура не будет держать форму, и могут образоваться прогибы в местах надавливания.

Оригами и 3D-моделирование - отличный способ скоротать дружеский или семейный вечер. Подобные занятия создают хороший интеллектуальный фон и помогают развивать пространственное воображение.

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

4.4.1. Построение правильных многогранников

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

Существует ровно 5 правильных многогранников: правильный тетраэдр, гексаэдр(куб), октаэдр, додекаэдр и икосаэдр. Их основные характеристики приведены в следующей таб. 4.2.

Правильные многогранники и их свойства

Таблица 4.2

Название

многогранника

Тетраэдр

Гексаэдр

Додекаэдр

Икосаэдр

Грани, ребра и вершины связаны между собой равенством Эй-

Г + В = Р + 2.

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

Для построения тетраэдра предварительно строится куб, на его противоположных гранях проводятся скрещивающиеся диагонали. Таким образом, вершинами тетраэдра являются любые 4 вершины куба, попарно не смежные ни с одним из его ребер рис.4.1.

тетраэдр

Рис. 4.1. Построение куба, тетраэдра и октаэдра

Для построения октаэдра предварительно строится куб. Вершины октаэдра – центры тяжести граней куба (рис.4.1), значит, каждая вершина октаэдра является средним арифметическим одноименных координат четырех вершин, образующих ее грань куба.

4.4.2. Построение икосаэдра

Икосаэдр и додекаэдр можно также построить при помощи куба. Однако существует и более простой способ конструирования:

- строятся две окружности единичного радиуса на расстоянии h=1;

- каждая из окружностей разбивается на 5 равных частей, как показано на рис. 4.2.

Рис. 4.2. Построение икосаэдра

- перемещаясь вдоль окружностей против часовой стрелки, нумеруем выделенные 10 точек в порядке возрастания угла поворота и затем последовательно в соответствии с нумерацией соединим эти точки прямолинейными отрезками;

- затем, стягивая хордами точки, выделенные на каждой из окружностей, получаем в результате пояс из 10 правильных треугольников;

- для завершения построения икосаэдра выберем на оси Z две точки так, чтобы длина боковых ребер пятиугольных пирамид с вершинами в этих точках и основаниями, совпадающими с построенными пятиугольниками, была равна длинам сторон пояса из треугольников. Нетрудно видеть, что для этого нуж-

ны точки с аппликатами ± 5 2 .

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

многогранные углы при вершинах будут равны между собой. Тем самым результат описанного построения – икосаэдр.

4.4.3. Построение додекаэдра и сферы

Для построения додекаэдра воспользуемся свойством двойственности: вершины додекаэдра –центры (тяжести) треугольных граней икосаэдра. Значит, координаты каждой вершины додекаэдра можно найти, вычислив средние арифметические соответствующих координат вершин граней икосаэдра.

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

каждая треугольная грань разбивается на четыре части, новые вершины берутся на серединах сторон грани, как показано на рис.4.3.;

Рис. 4.3. Грань икосаэдра

новые вершины проецируются на поверхность сферы, для этого из центра сферы через вершину проводится луч и вершина переносится в точку пересечения луча с поверхностью сферы;

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

Рассмотренные алгоритмы позволяют получить параметры основных геометрических моделей. Аналогичным образом можно построить модели цилиндра, тора и других тел.

4.5. Полиномиальные параметрические формы представления

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

4.5.1. Формы представления кривых и поверхностей

Существуют три главных формы математического представления кривых и поверхностей: явная, неявная, параметрическая.

Явная форма задания кривой в двухмерном пространстве представляет собой уравнение, в левой части которого стоит зависимая переменная, а в правой части – функция, аргументом которой является независимая переменная.

Неявная форма в двумерном пространстве f(x , y) =0. В параметрической форме в трехмерном пространстве:

уравнение кривой – x = x (u ), y = y (u ), z = z (u ) ;

уравнение поверхности – x = x (u , v ), y = y (u , v ), z = z (u , v ).

Одно из главных достоинств параметрической формы (ПФ) представления – ее единообразие в двух- и трехмерном пространствах. ПФ является, во-первых, наиболее гибкой, а во-вторых, устойчивой к любым вариациям формы и ориентации объектов, что делает ее особенно удобной в математическом обеспечении систем компьютерной графики.

Параметрические полиномиальные кривые и поверхности

Существует множество способов представления объектов, но мы сосредоточимся на полиномиальных, т.е. все функции параметра u при описании кривых или параметров u и v при описании поверхностей являются полиномами.

Рассмотрим уравнение кривой:

p (u ) = [ x (u ) y (u ) z (u )] T .

i = 0 j = 0

Полиномиальная параметрическая кривая степени n имеет вид (в OpenGL часто используется термин «порядок» полинома (order), который имеет значение на 1 больше, чем степень полинома)

p(u) = ∑ uk ck ,

k= 0

где c k имеет независимые компоненты x , y , z , т.е. c k = c xk

c zk

Матрица {c k }, состоящая из n +1 столбцов, объединяет коэффициенты полиномов для компонентов p ; это означает, что у нас есть 3(n +1) степеней свободы в выборе коэффициентов для конкретной кривой p .

Кривую можно определить на любом интервале изменения параметра u , но не теряя общности суждений, можно принять, что 0 ≤ u ≤ 1, т.о. определяется сегмент кривой.

Параметрическая полиномиальная поверхность описывается уравнением следующего вида:

x(u, v)

p(u, v) = y(u, v) = ∑∑ n m cij ui v j .

z(u, v)

Таким образом, для определения конкретной поверхности p (u ,v ) необходимо задать 3(n +1)(m +1) коэффициентов. Можно при анализе принять n=m , а параметры u и v изменять на интервале 0 ≤ u, v ≤ 1 и определить порцию поверхности (surface patch), показанной на рис. 4.4.

Рис. 4.4. Определение порции поверхности

Определенный таким способом участок поверхности можно рассматривать как предел, к которому стремится множество кривых, которые формируются, когда один из параметров u или v пробегает значения в своем интервале, в то время как другой сохраняет посто-

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

Отметим преимущества использования полиномиальной параметрической формы представления:

возможность локального контроля формы объекта;

гладкость и непрерывность в математическом смысле;

возможность аналитического вычисления производных;

устойчивость к малым возмущениям;

возможность использовать относительно простые, а значит, высокоскоростные методы тонирования.

4.5.2. Параметрически заданные кубические кривые

Если воспользоваться полиномом очень высокой степени, будет больше «свободы», но потребуется и больше вычислений при расчете координат точек. Также при росте степени свободы возрастает опасность получить волнистую форму кривой. С другой стороны, выбор полинома слишком низкой степени даст нам слишком мало параметров, и не удастся воспроизвести форму кривой. Решение – кривая разбивается на сегменты, которые описываются полиномами низкой степени.

Описать кубическую полиномиальную кривую можно следующим образом:

p(u) = c0 + c1 u + c2 u2 + c3 u3 = ∑ uk ck = uT c,

k= 0

где c = [ c 0 c 1 c 2c 3 ] ,

u = 1 u u

c k = c xk

c yk c zk

В этих выражениях c представляет собой матрицу коэффициентов полинома. Именно ее и требуется вычислять по заданному ансамблю опорных точек. Далее рассмотрим разные классы кубических кривых, которые отличаются характером сопоставления с опорными точками. Для каждого типа будет сформирована система из 12 уравнений с 12-ю неизвестными, но, поскольку параметрические функции для компонентов x,y,z независимы, эти 12 уравнений будет разделены на три группы по 4 уравнения с 4-мя неизвестными.

Вычисление значений коэффициентов определенного типа кубической кривой выполняется по заданному ансамблю опорных точек, соответствующих некоторым значениям независимого параметра

u . Эти данные могут иметь форму ограничений, требующих, чтобы кривая проходила через некоторые из заданных точек и в окрестности других точек. Кроме того, эти данные накладывают и определенные условия на гладкость кривой, например непрерывность производных в заданных точках сопряжения отдельных сегментов. Кривые разного класса, сформированные на одних опорных точках, могут существенно отличаться.

4.5.3. Интерполяция

Пусть имеются четыре опорные точки в трехмерном пространстве: p 0 , p 1 , p 2 и p 3 . Каждая точка представлена тройкой своих координат:

p k = [ x k y k z k ] T .

Найдем элементы матрицы коэффициентов c , такие, что полином p(u)=u T c будет проходить через заданные четыре опорные точки.

Решение. Есть четыре точки, составляем 12 уравнений с 12-ю неизвестными – элементами матрицы c . Полагаем, что значения u k (k= 0,1,2,3) распределены равномерно на интервале , т.е. u= 0,1/3,2/3,1. Получаем уравнения:

P (0) = c 0 ,

c 3 ,

c 3 ,

p 3 = p (1 ) = c 0 + c 1 + c 2 + c 3 .

Запишем эти уравнения в матричной форме: p=AC ,

p = [ p 0 p 1 p 2 p 3 ] T

(2 3 )

(2 3 )

Проанализируем матрицу A . Если интерпретировать p и c как матрицы-столбцы из 12 элементов, то правило умножения матриц соблюдено не будет. Но мы можем рассматривать p и c как матрицы столбцы из 4-х элементов, каждый из которых в свою очередь является матрицей-строкой. Тогда в результате произведения получим элемент того же вида, что и элементы матрицы столбца p . Матрица не является вырожденной, ее можно обратить и получить базисную ин-

терполяционную матрицу:

M I = A − 1 = − 5.5

− 4.5

− 22.5

− 4.5

− 13.5

− 4.5

Располагая значениями M I , можно вычислить искомые значения коэффициентов c= M I /p .

Если кривая задана не 4-мя, а m опорными точками, то можно представить интерполяционным полиномом (m -1)-го порядка (рассчитать 3× m коэффициентов, используя аналогичную методику). Можно поступить иначе – считать эту кривую состоящей из нескольких сегментов, каждый из которых задается очередной группой из 4-х точек. Непрерывность можно обеспечить тем, что считать последнюю опорную точку предшествующей группы первой опорной точкой следующей группы. Матрицы M I на каждом сегменте будут одинаковы, т.к. u . Но в этом случае функции производных по па-

раметру будут претерпевать разрыв в точках сопряжения.

4.5.4. Функции смешивания (полиномиальные весовые функции опорных точек)

Проведем анализ гладкости интерполяционных полиномиальных кривых. Для этого перепишем выведенные ранее соотношения в слегка измененном виде:

p(u) = uT с = uT M I p .

Это соотношение можно записать в виде: p (u ) = b (u ) T p ,

b(u) = M I T u ,

есть матрица-столбец из четырех полиномиальных функций смеши-

вания (blending polynomials) :

b (u ) = [ b 0 (u ) b 1 (u ) b 2 (u ) b 3 (u )] T .

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

p (u ) = b 0 (u ) p 0 + b 1 (u ) p 1 + b 2 (u ) p 2 + b 3 (u ) p 3 = ∑ b i (u ) p i .

i= 0

Из этого соотношения следует, что полиномиальные функции смешивания характеризуют вклад, который вносит каждая опорная точка, и таким образом позволяют оценить, насколько скажется на виде конечной кривой изменение положения той или иной опорной точки. Аналитические выражения для них:

b 0 (u ) = − 9 2 (u − 1 3 )(u − 2 3 )(u − 1), b 1 (u ) = 27 2 u (u − 2 3 )(u − 1),

b 2 (u ) = − 27 2 u (u − 1 3 )(u − 1), b 3 (u ) = 9 2 (u − 1 3 )(u − 2 3 ) .

Т.к. все нули функций лежат на отрезке , то их значения могут существенно изменятся на этом интервале, а сами функции не являются монотонными (рис. 4.5.). Эти характеристики следуют из того, что интерполяционная кривая должна проходить через опорные точки, а не в ближайшей их окрестности. Плохая гладкость кривой, отсутствие непрерывности производных в точках стыка сегментов объясняют, почему интерполяционные полиномиальные кривые редко используются в КГ. Но пользуясь той же методикой анализа, можно отыскать более подходящий тип кривой.

b1 (u)

b2 (u)

b3 (u)

Рис. 4.5. Полиномиальная функция смешивания

для случая кубической интерполяции

Порция кубической интерполяционной поверхности

Бикубическое уравнение поверхности можно записать следующим образом:

p(u, v) = ∑∑ ui v j cij .

i = 0 j = 0

Здесь c ij – трехкомпонентная матрица-столбец, элементами которой являются коэффициенты при одинаковых степенях независимой переменной в уравнениях для x , y , z- компонент. Определим матрицу C 4x4 таким образом, что ее элементами будут трехкомпонентные мат- рицы-столбцы:

C = [ cij ].

Тогда описать порцию поверхности можно следующим образом: p (u , v ) = u T Cv ,

v = 1 v v

Конкретная порция бикубической поверхности определяется 48 значениями элементов матрицы C – 16-ю трехмерными векторами.

Допустим, что имеется 16 трехмерных опорных точек p ij , i= 0,..,3, j= 0,..,3 (рис. 4.6.). Будем считать, что эти данные используются для интерполирования с равным шагом по обоим независимым параметрам u и v , которые принимают значения 0, 1/3, 2/3, 1. Отсюда

получим три набора из 16 уравнений с 16 неизвестными в каждом. Так, при u=v= 0 получим

p 00 = [ 1 0 0 0] C 0 0 = c 00 .0

Рис. 4.6. Порция интерполяционной поверхности

Можно не решать все эти уравнения. Если зафиксировать v =0, то, изменяя u , получим кривую, проходящую через p 00 , p 10 , p 20 , p 30 . Используя результаты, полученные в предыдущем разделе, можем записать для этой кривой следующее соотношение:

p (u ,0) = u T M

UT C .

При значениях v= 1/3, 2/3, 1 можно определить три другие интерполяционные кривые, каждую из которых можно описать тем же способом. Объединив уравнения для всех кривых, получим интересующую нас систему из 16 уравнений:

uT M I P = uT CAT ,

где A – матрица, обратная M I . Решением этого уравнения будет искомая матрица коэффициентов:

C = M I PM I T .

Подставляя ее в уравнение поверхности, окончательно получим p (u ,v ) = u T M I PM I T v .

Этот результат можно интерпретировать по-разному. Из него следует, во-первых, что результаты, полученные при анализе кривых, можно распространить на соответствующие поверхности. Во-вторых, можно распространить на поверхности методику использования полиномиальных функций смешивания:

p(u, v) = ∑∑ bi (u) bj (v ) pij .

i = 0 j = 0

4.5.5. Форма представления кривых и поверхностей Эрмита

Пусть имеются точки p 0 , p 3 и сегменту соответствует интервал u , т.е. имеющиеся точки соответствуют u =0 и u =1. Запишем

два условия:

p (0) = p 0 = c 0,

p (1) = p 3 = c 0 + c 1 + c 2 + c 3.

Два других условия получим, задав значения производных функций в крайних точках сегмента u =0 и u =1:

p " (u ) = c 1 + 2uc 2 + 3u 2 c 3 , тогда

p " 0 = p " (0) = c 1 ,

p " 3 = p " (1) = c 1 + 2 c 2 + 3 c 3.

Запишем эти уравнения в матричной форме:

p " 3

Обозначив через q вектор данных

q = [ p0

p " 0

p " 3 ] T ,

можно записать уравнение в виде:

c = M H q ,

где MH называется обобщенной матрицей Эрмита (Hernite geometry matrix).

−3

−2

−1

−2

В результате получим представления полиномиальной кривой в форме Эрмита:

p(u) = uT M H q.

Будем использовать форму Эрмита для представления сегментов составной кривой, как показано на рис. 4.7. Точка сопряжения является общей для обоих сегментов, и, кроме того, производные к кривой в точке сопряжения для обоих сегментов также равны. В результате получаем составную кривую, непрерывную по первой производной на всем протяжении.

p(0) p(1)=q(0)

Рис. 4.7. Применение формы Эрмита к стыковке сегментов

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

p(u) = b(u) T q,

где новая функция смешивания имеет вид

b(u) = M T u =

− 2 u 3 + 3 u 2 .

−2 u 2 +u

u 3 − u 2

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

Можно следующим образом определить порцию поверхности в форме Эрмита:

p (u , v ) = ∑∑ b i (u ) b j (v) q ij ,

i = 0 j = 0

где Q =[ q ij ] – набор данных, представляющих порцию поверхности аналогично тому, как q представляет сегмент кривой. Четыре элемента Q представляют собой значения функции p (u,v ) в угловых точках поверхности, а четыре других должны представлять производные к поверхности в этих угловых точках. В интерактивных приложениях пользователю желательно специфицировать не данные о производных, а координаты точек, и, следовательно, не сформулировав аналитические выражения для этих данных, мы не сможем получить производные.

Если в точке сопряжения значения всех трех параметрических компонент векторов p и q равны, то имеет место параметрическая непрерывность (parametric continuity) класса С 0 .

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

Если значения компонент производных пропорциональны, то имеет место геометрическая непрерывность класса G 1 .

Эти идеи можно обобщить для производных более высоких порядков.

Форма кривой, обладающей геометрической непрерывностью класса G 1 , зависит от коэффициента пропорциональности длин касательных к сегментам в точке сопряжения. На рис.4.8. показано, что форма сегментов кривых, совпадающих в конечных точках и имеющих в этих точках пропорциональные векторы касательных, довольно существенно отличается. Это свойство часто используется в графических программах вычерчивания.

p"(0) q(u) p"(1)

Рис. 4.8. Влияние длины вектора касательных на форму сегментов

4.5.6. Кривые и поверхности в форме Безье

Сравнение кривых в форме Эрмита и в форме интерполяционного полинома невозможно, т.к. для их формирования используются

разные по характеру наборы данных. Попробуем использовать один и тот же ансамбль опорных точек и для определения интерполяционного многочлена и для косвенного задания кривых в форме Эрмита. В результате этого получим кривую в форме Безье (Bezier), которая является хорошим приближением кривой в форме Эрмита и которую можно сравнивать с интерполяционным полиномом, сформированным на том же ансамбле точек. Кроме того, такая процедура идеально подходит для интерактивного построения криволинейных объектов в системах КГ и САПР, т.к. определение кривой в форме Безье не требует задания производных.

Кривые Безье

Пусть имеются четыре опорные точки в трехмерном пространстве: p 0 , p 1 , p 2 и p 3 . Конечные точки формируемой кривой p (u ) должны совпадать с опорными точками p 0 , p 1 :

p 0 = p (0), p 3 = p (1) .

Безье предложил использовать две другие опорные точки p 1 и p 2 для задания производных в крайних точках сегмента u= 0 и u= 1. Вос-

пользуемся для этого линейной аппроксимацией (рис.4.9).

p "(0) =

p 1 − p 0

3(p − p ),

p "(1) =

p 3 − p 2

3(p − p

Рис. 4.9. Аппроксимация векторов касательных

Применив эту аппроксимацию к касательным в двух крайних точках к параметрической полиномиальной кривой p (u ) = u T c , получим два условия:

3 p 1 − 3 p 0 = c 1,

3 p 3 − 3 p 2 = c 1 + 2 c 2 + 3 c 3.

Добавим их к уже имеющимся условиям совпадения кривой в конечных точках:

p (0) = p 0 = c 0 ,

p (1) = p 3 = c 0 + c 1 +c 2 + c 3 .

Итак, мы снова получили три набора по четыре уравнения относительно четырех неизвестных в каждом. Решая их по той же методике, что и в предыдущем разделе, получим:

c = M B p ,

где M B называется базисной матрицей Безье (Bezier geometry matrix):

= − 3

−6

−1

−3

В результате получим представления полиномиальной кривой в форме Безье:

p(u) = uT M B p .

Эту формулу можно использовать для получения составной кривой, сегменты которой являются интерполяционными полиномами. Очевидно, что составная кривая, построенная по методу Безье на произвольном ансамбле опорных точек, относится к классу С 0 , но требованиям класса С 1 она не удовлетворяет, т.к. касательные справа и слева от точки сопряжения аппроксимируются по разным формулам.

Проанализируем свойства кривой с помощью функций смешивания. Запишем полином в форме:

p(u) = b(u) T p,

где новая функция смешивания имеет вид (рис. 4.10):

−u )

b(u) = M T u = 3 u (1 − u ) 2

3u 2

(1− u )

Эти четыре полинома являются частными случаями полиномов Бернштейна :

b kd (u ) = k !(d d − ! k )! u k (1− u )d − k .

Свойства полиномов Бернштейна:

1) все нули в точках u= 0 или u= 1;

2) p (u ) должна лежать внутри выпуклой многоугольной оболочки, образованной четырьмя заданными точками, как показано на рис. 4.11. Таким образом, хотя кривая Безье и не проходит через все заданные опорные точки, она никогда не выходит за пределы области, ограниченной этими точками. Это очень удобно при интерактивном визуальном конструировании.

Рис. 4.11. Выпуклая оболочка и

Рис. 4.10. Полиномиальные функции

Порции поверхности в форме Безье

Порции поверхностей Безье можно сформировать с помощью функций смешивания. Если P = [ p ij ] – массив опорных точек с раз-

мерами 4x4, то соответствующая порция поверхности в форме Безье описывается соотношением:

p(u, v) = ∑∑ bi (u) bj (v ) pij = uT M B PM B T v.

i= 0

j= 0

Порция поверхности проходит через угловые точки p 00 , p 03 , p 30 и p 33 и не выходит за пределы выпуклого многоугольника, вершинами которого являются опорные точки. Двенадцать опорных точек из 16

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

4.6. Пример построения полигональных моделей

Рассматриваемую задачу – представление геометрических моделей, задаваемых полигональным сетками, – можно разбить на следующие этапы:

1) разработка модели (структур данных) для представления сцены;

2) разработка формата файла, для хранения модели;

3) написание программы для просмотра созданных сцен;

4) написание программы для генерации полигональных моделей объектов в соответствии с вариантом задания.

4.6.1. Разработка структур данных полигональной модели

Можно выделить следующие элементы модели: точка, полигон, модель отдельного объекта, сцена (множество объектов с заданным расположением относительно друг друга).

1) Точка описывается тремя координатами:

2) Полигон – в общем случае произвольный выпуклый многоугольник. Мы будем использовать его частный случай – треугольник. Наш выбор обоснован тем, что последующие алгоритмы закраски с Z-буфером, для своей работы будут требовать именно треугольные

грани и все более сложные многоугольники потребуется разбивать.

typedef struct Polygon {

int Points; //индексы трех вершин, образующих //полигон, вершины хранятся в списке вершин модели

3) Модель отдельного объекта представляет собой список точек и список вершин:

typedef struct Model3D {

Polygon Polygons; //массив полиго-

4) Сцена – это множество объектов с заданным расположением относительно друг друга. В простейшем случае можно использовать

список (массив) объектов, например,

4.6.2. Разработка формата файла для хранения модели

Для хранения и обработки сцен и моделей удобно использовать текстовые файлы, состоящие из различных секций. Секции могут разделяться ключевыми словами, которые делают чтение и редактирование файлов более простым, а также дают возможность задания для модели только части информации. Хорошим примером является формат DXF, который используется для обмена чертежей между САПР-системами. Рассмотрим простой пример:

где первое число – количество моделей в файле сцены N. Далее следует N моделей. Первым числом в описании моделей является количество вершин K. Далее последовательно перечисляются координаты

x,y,z всех К вершин. После этого идет число G, задающее количество граней в модели. После чего следует G строк, каждая из которых содержит индексы трех вершин, образующих треугольную грань.

4.6.3. Просмотр созданных сцен

Для просмотра созданных сцен в ортографической проекции разработана следующая программа:

#include #include #include #include

const int MAX_MODEL_COUNT = 3; //макс. к-во моделей в сцене const int MAX_POINT_COUNT =100; //макс. к-во точек в модели const int MAX_POLY_COUNT =100; //макс. к-во граней в модели

typedef struct Point { double x, y, z;

typedef struct Polygon {

int Points; //индексы трех вершин, образующих полигон

typedef struct Model3D {

int PolygonCount;//количество полигонов в модели

Polygon Polygons; //массив полигонов

Model3D Models; //массив моделей

//функция выполняет чтение сцены из файла

void LoadScene(Scene3D &scene, const char * filename)

if ((f = fopen(filename, "rt")) == NULL)

fprintf(stderr, "Cannot open input file.\n"); exit(1);

//читаем к-во моделей в файле fscanf(f, "%d", &scene.ModelsCount);

for(int m = 0; m < scene.ModelsCount; ++m)

Model3D *model = &scene.Models[m]; //загрузка списка точек модели fscanf(f, "%d", &model->PointCount);

for(int i = 0; i < model->PointCount; ++i)

fscanf(f, "%lf%lf%lf", &p.x, &p.y, &p.z); model->Points[i] = p;

Polygon *p = &(model->Polygons[i]); fscanf(f, "%d%d%d", &(p->Points),

&(p->Points), &p->Points);

//вывод на экран каркасной //модели в ортографической проекции

//недостаток - все ребра рисуются по два раза void DrawWireFrameScene(const Scene3D &scene)

for(int m = 0; m < scene.ModelsCount; ++m)

const Model3D *model = &scene.Models[m]; for(int i = 0; i < model->PolygonCount; ++i)

const Polygon *poly = &model->Polygons[i];

&model->Points;

&model->Points;

&model->Points;

line(320 + p1->x,

line(320 + p2->x,

line(320 + p3->x,

//инициализация графического режима void InitGraphMode(void)

int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "");

errorcode = graphresult();

if (errorcode != grOk) //an error occurred

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

//возвращаем код ошибки

Scene3D scene; LoadScene(scene, "model.dat"); InitGraphMode(); DrawWireFrameScene(scene); getch();

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

Но из-за упрощения для повышения наглядности он имеет следующие существенные недостатки:

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

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

3) описание структур данных и методы, их поддерживающие, следует выделить в отдельный модуль, тогда его можно будет использовать, например, в программах генерации примити-

Таким образом, в настоящее время доминируют полигональные геометрические модели. Это вызвано простотой программного и аппаратного их представления. В виду постоянного роста возможностей

вычислительной техники с одной стороны и требований к качеству моделей с другой ведутся интенсивные исследования новых типов моделей.

Контрольные вопросы и упражнения

1. Чем отличаются геометрические модели от других видов моделей?

2. Назовите основные компоненты геометрической модели.

3. Чем отличаются координатные модели от аналитических?

4. Какие виды геометрических моделей существуют?

5. Почему полигональные модели получили широкоераспространение?

6. Какие способы задания полигональной модели вы знаете?

7. Какие недостатки и ограничения имеют полигональные модели?

8. Реализуйте алгоритмы построения полигональных моделей додекаэдров, икосаэдров и сфер.

9. Предложите алгоритм построения полигональной модели тора.

10. Каким образом можно сократить объем данных, хранимых

в памяти ЭВМ, при многократном использовании одинаковых полигональных моделей?