Побудова ікосаедра. Як зробити з паперу ікосаедр? Посібник з виконання

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

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 = [c0c1c2c3],

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

з 3 ,

з 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) pi.

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 ) = ∑∑ b i( u ) b j(v) p ij= u T M B PM BT v .

i = 0

j = 0

Порція поверхні проходить через кутові точки p00 , p03 , p30 і p33 і виходить межі опуклого багатокутника, вершинами якого є опорні точки. Дванадцять опорних точок із 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,

//ініціалізація графічного режиму 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. Як можна скоротити обсяг даних, що зберігаються

впам'яті ЕОМ при багаторазовому використанні однакових полігональних моделей?

У багатьох конструкторів виробляється звичка подумки змінювати предмети та конструкції, що потрапляють їм у руки чи на очі, у пошуках раціональнішого рішення чи просто з цікавості: а що з цього вийде? Наведений нижче приклад ілюструє вправи-розваги конструктора.

На малюнку 1 суцільними лініями показана розгортка, що складається із двадцяти однакових рівносторонніх трикутників.

Якщо накреслити розгортку на щільному папері, вирізати її, надрізати папір не дуже гострим ножем по лініях, що відокремлюють трикутники один від одного і від лапок, зігнути розгортку по цих лініях в один бік, склеїти один з одним кінці смужки трикутників 2, 4 , 6, 8, 10, 12, 14, 16, 18, 20, а з трикутників 1, 5, 9, 13, 17 і 3, 7, 11, 15, 19 склеїти дві п'ятигранні пірамідки, то ви будете повністю винагороджені за свою працю. У ваших руках виявиться тіло, чудове за досконалістю форми, - правильний двадцятигранник (ікосаедр), що має двадцять однакових граней - рівносторонніх трикутників, тридцять однакових ребер і дванадцять виступів, що складаються з п'ятигранних пірамідок. Несподівано замість двох склеєних пірамідок їх виявилося шість пар із шістьма осями, що проходять через ці пари. Ікосаедр симетричний щодо всіх шести осей. Вершина кожної з дванадцяти пірамідок і три кути кожної грані стосуються кульової поверхні. Інші точки граней близькі до неї. У порівнянні з гранями інших правильних багатогранників грані ікосаедра найближче розташовані до поверхні описаної сфери, число граней максимально, і форма його найближча до форми кулі. Звідси виникає можливість будувати, наприклад, карту планети на двадцяти рівносторонніх трикутниках, проектуючи точки сфери за допомогою її радіусів на межі вписаного ікосаедра. Можливість застосування цього способу може бути з'ясована більш глибоким аналізом.

Тепер уявімо, що ікосаедр є не оболонкою, а суцільним тілом. Подумки змінюватимемо його форму, поступово і рівномірно зрізуючи верхівки всіх пірамідок площинами, перпендикулярними до їх осях. З'явиться дванадцять нових граней у вигляді правильних п'ятикутників, а в колишніх трикутних граней зріжуться куточки, вони перетворяться на шестикутники з трьома новими невеликими сторонами замість зрізаних кутів. При подальшому зрізанні пірамідок п'ятигранники збільшуються, а у шестигранників короткі сторони ростуть, довгі скорочуються і, нарешті, виходить нова цікава форма багатогранника, що складається з дванадцяти п'ятикутників рівносторонніх і двадцяти рівносторонніх шестикутників. З такої форми роблять футбольні м'ячі.

Якщо зрізати пірамідки далі, то площа п'ятикутників продовжує зростати, а шестикутники стають нерівносторонніми, колишні їхні сторони стануть коротшими за нові, і так продовжуватимуться доти, доки колишні сторони не зникнуть, а нові зімкнуться в трикутники. Отримаємо нову цікаву форму багатогранника, що складається з дванадцяти правильних п'ятикутників та двадцяти рівносторонніх трикутників. При подальшому зрізанні матеріалу з площини п'ятигранників вони перетворяться на десятигранники, а трикутники зменшаться у розмірах. Настане момент, коли нерівні сторони десятигранників зрівняються і вийде нова форма – дванадцять рівносторонніх десятикутників та двадцять маленьких рівносторонніх трикутників. Продовжуючи знімати матеріал із площин десятикутників, зрештою знову отримаємо дванадцять рівносторонніх п'ятикутників, а трикутники зникнуть. Це буде відома форма дванадцятигранника пентагон-доде-каедра. З таких дванадцяти платівок, але видавлених за сферою, був виготовлений радянський вимпел, надісланий на Місяць. На малюнку дано його розгортка (рис. 2).

При зрізанні двадцяти тригранних кутів отримаємо замість них двадцять трикутників, п'ятикутні грані перетворяться на десятикутні. Якщо продовжувати цю операцію далі, отримаємо ті самі форми, що і при зрізанні кутів у ікосаедра, але в зворотному порядку і врешті-решт знову отримаємо ікосаедр, але значно менших розмірів.

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

Багато цікавіше досліджувати ікосаедр не як суцільне тіло, бо як оболонку. У цьому випадку він являє собою замкнутий об'єм, наприклад, посудина для рідини та газу, виготовлена ​​з плоского листа. Жорсткість оболонці надають ребра. Ребра можуть бути замінені стрижнями або нитками, і тоді виникають інші варіації: жорсткий кошик або м'яка сітка з великими осередками.

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

Додамо до розгортки ще чотири трикутники, як показано пунктиром на малюнку 1. Шість рівносторонніх трикутників з кожної сторони стрічки зігнуться тепер не в пірамідки, а вкладуться в плоскі правильні шестикутники і на розгортці можуть бути замінені. Після склеювання отримаємо барабан, що складається з дванадцятигранної обичайки та двох шестикутних денців (рис. 3).

Аналогічний барабан можна отримати з ікосаедра, якщо дві протилежні п'ятигранні пірамідки замінити п'ятикутними денцями.

Відріжемо тепер від розгортки трикутники 17-20. З трикутників 1-16, що залишилися, отримаємо шістнадцятигранник з двома чотиригранними пірамідками і однією поздовжньою віссю (рис. 4).

Якщо зрізати чотиригранні пірамідки та замінити їх квадратними гранями, отримаємо десятигранник, що складається з восьми трикутних та двох квадратних граней (рис. 5).

Відріжемо тепер від розгортки (рис. 1) ще чотири грані. З трикутників 1-12, що залишилися, несподівано виходить шестигранник, тому що кожна пара трикутників утворила одну грань у вигляді ромба (рис. 6).

Це ромбічний додекаедр, назвемо його «ромбоїдом», має, як і куб, шість граней, вісім тригранних кутів та дванадцять ребер. Якщо його покласти на одну з граней, то в ньому неважко дізнатися про перекошений по діагоналі куб. Якщо такий ромбоїд зробити з дванадцяти стрижнів замість ребер, з'єднавши їх по кутах шарнірно, то при розтягуванні його вздовж поздовжньої осі стрижні складуться в ціпок, що складається з трьох стрижнів по кінцях і шести посередині. При поздовжньому стисканні цієї палиці стрижні розійдуться спочатку у витягнутий ромбоїд, потім у куб, потім у сплющений ромбоїд і, нарешті, укладуть в одну площину у вигляді правильного шестикутника. Ось і ідея для конструктора - табурет і парасолька, що складаються у вигляді палиці.

Варіант ромбоїда, сильно витягнутий уздовж осі (рис. 7, розгортка 8), представляє особливий інтерес.

Таке тіло з великим подовженням ? лобовий опір у порівнянні з іншими тілами такого ж подовження, тому що передні та задні ребра тіла спрямовані по обтічному потоку, а середні шість ребер утворюють з потоком очей гострі кути. Це твердження потребує ще доказу чи перевірки експериментом.

Зрізаючи у ромбоїда (рис. 6) обидві тригранні пірамідки (для чого всі ромби доведеться розрізати навпіл), знову несподівано отримаємо добре відомий правильний восьмигранник – октаедр (рис. 9). Його розгортка складається з трикутників 1, 2, 4, 6, 8, 10, 11, 12. Між октаедром і кубом існують «родинні» відносини, аналогічні відносинам між ікосаедром та Пентагон-додекаедром.

Зрізуючи кути першого, одержують другий через проміжні чотирнадцятигранники.

З розгортки, що складається з трикутників 1, 2, 4, 5, 6, 7, 8, 10, 11, 12, склеюється правильний десятигранник, що складається з двох п'ятигранних пірамід, складених основами. З трикутників 2, 4, 6, 8, 10, 12 отримуємо розгортку правильного шестигранника, що представляє собою два прикладені один до одного тетраедра, а розгортка тетраедра - правильного чотиригранника - складається з трикутників 2, 4, 6, 8 (рис. 10).

Цікаво відзначити, що у тетраедра чотири грані та чотири виступи, тому з тетраедра, зрізуючи тригранні кути, отримаємо знову тетраедр через проміжні восьмигранники з трикутними та шестикутними гранями.

Нарешті, із двох трикутників теж можна склеїти «тіло», але це буде плоский трикутник, двосторонній, тобто тіло, що не має об'єму.

Отже, виявляється, що правильні багатогранники можна склеювати із парного числа рівносторонніх трикутників. При цьому із двох виходить «тіло без обсягу». З дванадцяти трикутників виходить ромбоїд, тобто шестигранник із ромбічними гранями або тіло без об'єму у вигляді двох склеєних правильних шестикутників. З двадцяти чотирьох трикутників отримуємо чотирнадцятигранник, у якого дві грані - правильні шестикутники. Принагідно пропонується завдання для читачів: чи можна склеїти замкнуту фігуру іншим способом із чотирнадцяти, вісімнадцяти та двадцяти двох рівносторонніх трикутників?

Розглянемо ще одну можливість варіювання розгортки, показаної на рис. 1. Якщо відкинути верхні та нижні зубці і залишити тільки стрічку, що складається з парних номерів трикутників, а потім скласти кілька таких стрічок їх бічними кромками, отримаємо розгортку, показану на малюнку 11.

Розгортка дана для дванадцяти трикутників у кожній стрічці. Накресливши і вирізавши цю розгортку, зігніть її по косих лініях в один бік, а горизонтальними - в іншу. У склеєному вигляді отримуємо фігуру, близьку до круглого циліндра, але з гранчастою бічною поверхнею. Ця фігура виходить жорсткою на кручення, на вигин, поздовжнє стиск і з місцевою жорсткістю бічної стінки. Ця варіація, мабуть, буде найбільш цінною в практичному застосуванні. Вона може служити схемою будівельної конструкції, легкою, міцною, жорсткою та сейсмостійкою. Вона не надто складна у виробництві і може бути здійснена як у стінному варіанті, так і на ферменному, якщо ребра замінити стрижнями. У другому випадку, складена з трикутників, вона буде статично визначною.

  • (У біології)
  • Багато людей люблять створювати підробки з паперу, причому це зовсім не залежить від їхнього віку, такого заняття схильні як діти, так і дорослі. Єдина відмінність полягає в тому, що дорослі люблять створювати складніші постаті. Особливо часто чомусь створюються геометричні фігури. У нашій статті ми розповімо вам, як зробити з паперу ікосаедр. Саме таку назву отримав складний, правильний багатокутник, який має цілих двадцять трикутних граней та тридцять ребер. Як ви могли відзначити, така фігура досить складна на вигляд. Навіть якщо ви новачок в орігамі, то наш метод не видасться складним і ви з легкістю його склеїте з паперу.

    Серед усього різноманіття матеріалів, які використовуються для його виготовлення, ви можете взяти такі: гофрований папір, фольгу, папір для упаковки подарунків або квітів. За допомогою різних інших матеріалів, ви зможете покращити вашу фігуру та прикрасити її. Не обмежуйте у цій справі вашу фантазію, і вона вам допоможе.

    Перед тим, як почати, вам потрібно підготуватися. Для цього вам знадобляться такі матеріали:

    1. Заготовляє фігуру, яку потрібно перенести на матеріал для нашої фігури.
    2. Клей. Найкраще використовувати ПВА - він сохне досить довго, щоб ви могли виправити помилки при склеюванні.
    3. Ножиці.
    4. Лінійка.

    Як тільки ви роздобути всі необхідні компоненти, то ви можете починати роботу. Тепер ми представимо схему, за якою можна виготовити цю фігуру:

    Отже, наша фігурка готова і тепер ви зможете зайнятися її прикрасою. Його можна розмалювати фарбами або олівцями, підвісити на мотузку. Також чудово підійдуть різні блискітки, шматочки дощу. Дуже часто, таку прикрасу можна використовувати як іграшку на новорічну ялинку. Крім цього, ви можете зробити дуже кумедну річ, використовуючи ікосаедри, а саме – футбольний м'яч, який є усіченою фігурою. Якщо уважно його оглянути, ви помітите, що він складається з дванадцяти п'ятикутників і двадцяти шестикутників, які мають однакові розміри. Розмальована фігурка чудово виглядатиме, а різні кольори простих елементів ще сильніше покажуть таку різницю.

    Якщо така ідея вас зацікавила, то нижче ми представляємо розгортку, за допомогою якої ви зможете зробити м'яч:

    Як бачите, створення фігурок із паперу – це дуже цікавий процес. Коли ви навчитеся робити ікосаедр, то можете переходити до інших, складніших геометричних фігур. Особливо це корисно для дітей, які можуть з ранніх років розвивати просторове мислення, вивчати геометрію та покращувати дрібну моторику. Якщо дитина зовсім маленька, то може знадобитися допомога батьків, втім, з готовою іграшкою вона радісно гратиме самостійно. Тим не менш дорослим таке заняття буде теж корисно - це прекрасне хобі, яке може допомогти розслабитися або просто скоротити час. Якщо ви любите не кропітку роботу, що потребує уваги, то таке заняття саме те що треба.

    Ми сподіваємося, що наша стаття про те, як зробити ікосаедр із паперу, зацікавила вас. Можливо, саме з цієї фігури ви почнете займатися виробами з паперу. Удачі та успіхів у всіх починаннях!

    Відео уроки

    Багато людей люблять створювати підробки з паперу, причому це зовсім не залежить від їхнього віку, такого заняття схильні як діти, так і дорослі. Єдина відмінність полягає в тому, що дорослі люблять створювати складніші постаті. Особливо часто чомусь створюються геометричні фігури. У нашій статті ми розповімо вам, як зробити з паперу ікосаедр. Саме таку назву отримав складний, правильний багатокутник, який має цілих двадцять трикутних граней та тридцять ребер. Як ви могли відзначити, така фігура досить складна на вигляд. Навіть якщо ви новачок в орігамі, то наш метод не видасться складним і ви з легкістю його склеїте з паперу.

    Серед усього різноманіття матеріалів, які використовуються для його виготовлення, ви можете взяти такі: гофрований папір, фольгу, папір для упаковки подарунків або квітів. За допомогою різних інших матеріалів, ви зможете покращити вашу фігуру та прикрасити її. Не обмежуйте у цій справі вашу фантазію, і вона вам допоможе.

    Перед тим, як почати, вам потрібно підготуватися. Для цього вам знадобляться такі матеріали:

    1. Заготовляє фігуру, яку потрібно перенести на матеріал для нашої фігури.
    2. Клей. Найкраще використовувати ПВА - він сохне досить довго, щоб ви могли виправити помилки при склеюванні.
    3. Ножиці.
    4. Лінійка.

    Як тільки ви роздобути всі необхідні компоненти, то ви можете починати роботу. Тепер ми представимо схему, за якою можна виготовити цю фігуру:

    Отже, наша фігурка готова і тепер ви зможете зайнятися її прикрасою. Його можна розмалювати фарбами або олівцями, підвісити на мотузку. Також чудово підійдуть різні блискітки, шматочки дощу. Дуже часто, таку прикрасу можна використовувати як іграшку на новорічну ялинку. Крім цього, ви можете зробити дуже кумедну річ, використовуючи ікосаедри, а саме – футбольний м'яч, який є усіченою фігурою. Якщо уважно його оглянути, ви помітите, що він складається з дванадцяти п'ятикутників і двадцяти шестикутників, які мають однакові розміри. Розмальована фігурка чудово виглядатиме, а різні кольори простих елементів ще сильніше покажуть таку різницю.

    Якщо така ідея вас зацікавила, то нижче ми представляємо розгортку, за допомогою якої ви зможете зробити м'яч:


    Як бачите, створення фігурок із паперу – це дуже цікавий процес. Коли ви навчитеся робити ікосаедр, то можете переходити до інших, складніших геометричних фігур. Особливо це корисно для дітей, які можуть з ранніх років розвивати просторове мислення, вивчати геометрію та покращувати дрібну моторику. Якщо дитина зовсім маленька, то може знадобитися допомога батьків, втім, з готовою іграшкою вона радісно гратиме самостійно. Тим не менш дорослим таке заняття буде теж корисно - це прекрасне хобі, яке може допомогти розслабитися або просто скоротити час. Якщо ви любите не кропітку роботу, що потребує уваги, то таке заняття саме те що треба.

    Ми сподіваємося, що наша стаття про те, як зробити ікосаедр із паперу, зацікавила вас. Можливо, саме з цієї фігури ви почнете займатися виробами з паперу. Удачі та успіхів у всіх починаннях!

    Відео уроки

    Створювати вироби своїми руками цікаво не лише дітям, а й дорослим. Однак для дорослих придумано достатню кількість моделей, що відрізняються складністю виконання та часом, витраченим на їх створення. Останнім часом у дорослих та дітей виник інтерес до створення складних геометричних фігур. До такого виду фігур відноситься ікосаедр, який є правильним багатокутником і є одним з платонових тіл – правильних багатогранників. Ця фігура має 20 трикутних граней (рівносторонніх трикутників), 30 ребер та 12 вершин, які є місцем стику 5 ребер. Правильний ікосаедр із паперу зібрати досить складно, але цікаво. Якщо ви захоплені орігамі, то зробити ікосаедр паперовий своїми руками вам не складно. Його зробити із кольорового, гофрованого паперу, фольги, пакувального паперу для квітів. Використовуючи різноманітні матеріали, можна надати ще більшої краси та ефектності своєму ікосаедру. Все залежить тільки від фантазії його творця та підручного матеріалу, що є на столі.

    Пропонуємо вам кілька варіантів розгорток ікосаедра, які можна роздрукувати, перенести на щільний папір і картон, зігнути лініями і склеїти.

    Як зробити ікосаедр з паперу: схема

    Для того щоб зібрати ікосаедр з аркуша паперу або картону, необхідно попередньо підготувати такі матеріали:

    • макет ікосаедра;
    • клей ПВА;
    • ножиці;
    • лінійка.

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

    Цікаво, що ікосаедр можна зустріти і в повсякденному житті. Наприклад, у формі зрізаного ікосаедра (багатогранник, що складається з 12 п'ятикутників та 20 шестикутників правильної форми) виконаний футбольний м'яч. Це особливо видно, якщо розфарбувати ікосаедр, що вийшов, у чорно-білий колір, як і сам м'яч.

    Такий футбольний м'яч можна зробити самостійно, роздрукувавши попередньо розгорнення усіченого ікосаедра в 2 примірниках:

    Створення ікосаедра своїми руками представляє цікавий процес, який вимагає вдумливості, терпіння та великої кількості паперу. Однак результат, отриманий у підсумку, радуватиме око ще довгий час. Ікосаедр можна дати пограти дитині, якщо вона досягла вже трирічного віку. Граючи з такою складною геометричною фігурою, він розвиватиме не лише образне мислення, просторові навички, а й знайомитиметься зі світом геометрії. Якщо ж дорослий вирішив створити ікосаедр самостійно, то такий творчий процес конструювання ікосаедра дозволить скоротати час, а також похвалитися перед близькими своїм умінням створювати складні фігури.