- •Http://antibotan.Com/ - Всеукраїнський студентський архів розділ 1. Координатні перетворення та проекції
- •1.1. Афінна геометрія
- •1.1.1. Афінні перетворення точок у просторі
- •1.1.2. Перетворення ліній та площин у просторі
- •1.2. Перспективно-проекційна геометрія
- •1.2.1. Однорідні координати
- •1.2.2. Проектування тривимірних об’єктів
- •1.2.3. Паралельні проекції
- •1.2.4. Центральні проекції
- •1.2.5. Неозначені точки
- •1.2.6. Одноточкова перспективна проекція
- •1.2.7. Двоточкова перспективна проекція
- •1.2.8. Триточкова перспективна проекція
- •Розділ 2. Просторові криві
- •2.1. Геометрія просторових кривих
- •2.1.1. Параметричне і непараметричне зображення кривих
- •2.1.2. Дотична, головна нормаль і бінормаль до кривої
- •2.1.3. Кривина, закручування кривої та формули Френе
- •2.2. Побудова плоских кривих
- •2.2.1. Конічні переріз
- •2.2.2. Трансцендентні криві
- •2.3. Кубічні сплайни
- •2.3.1. Сплайнова функція однієї змінної
- •2.3.2. Сплайнова функція в тривимірному випадку
- •Дослідження гладкості кривої
- •2.3.4. Граничні умови
- •2.4. Кубічні сплайни Без’є
- •2.5. Базис Бернштейна-Без’є
- •2.5.1. Геометричні властивості поліномів Бернштейна
- •2.5.2. Часткові випадки
- •2.6. Апроксимація на основі b-сплайнів
- •2.6.1. Головні властивості b-сплайнів
- •2.6.2. Базисні функції
- •2.6.3. Вузловий вектор
- •2.6.4. Приклади застосування b-сплайнів
- •2.7. Раціональні криві
- •2.7.1. Головні принципи раціональних кривих
- •2.7.2. Раціональні квадратичні сегменти конічного перерізу
- •2.7.3. Раціональні криві Без’є
- •Розділ 3. Опис і побудова поверхонь
- •3.1. Геометрія поверхонь
- •3.1.1.Поняття поверхні, дотична площина до поверхні
- •3.1.2. Перша квадратична форма
- •3.1.3. Друга квадратична форма поверхні
- •3.1.4. Нормальна кривина поверхні
- •3.1.5. Перетворення параметрів поверхні
- •3.2. Утворення і зображення поверхонь
- •3.2.1. Класифікація поверхонь
- •3.2.2. Лінійчаті поверхні
- •3.3. Поверхні Без’є
- •3.3.1. Параметричне рівняння поверхні Без’є
- •3.3.2. Властивості ділянок поверхні Без’є
- •3.4.1. Параметричні рівняння ділянок в-сплайн поверхні
- •3.4.2. Властивості ділянок бікубічних в-сплайнповерхонь
- •Розділ 4. Теоретичні основи та головні алгоритми растрової графіки
- •4.1. Створення базових геометричних форм
- •4.1.1. Пікселі
- •4.1.2. Рисування ліній
- •Input (x1,y1),(x2,y2)
- •4.1.3. Побудова кола
- •Input (r)
- •4.1.4. Побудова еліпса
- •4.2. Вирізання
- •4.2.1. Алгоритм серединної точки
- •4.15. Лінії до вирізання 4.16. Лінії після обрізання
- •4.2.2. Алгоритм Коена-Сазерленда
- •4.2.3. Алгоритм Лянга - Барського
- •4.3 Вирізання областей
- •4.3.1. Базовий матеріал
- •4.3.2. Алгоритм Сазерленда - Ходгмана
- •4.3.3. Алгоритми Сазерленда-Ходгмана вирізання поверхонь
- •Розділ 5. Застосування пакетів matlab у компютерній графіці
- •5.1. Головні відомості про matlab
- •5.1.1. Інтерфейс Matlab
- •5.1.2. Програмування в Matlab
- •If умова
- •5.1.3. Створення і застосування м-файлів
- •5.1.4. Робота з матрицями
- •5.2. Графіка в Matlab
- •5.2.1. Визначення точки споглядання
- •5.2.2. Об'єкти дескрипторної графіки
- •5.2.3. Побудова графіків. Команди Plot, Plot3
- •5.2.4 Примітиви
- •View(3); % 11
- •5.2.5. Алгоритми для примітивів
- •Image(x1,y,colour) % Lighting pixel
- •Image(X,y1,colour) % Lighting pixel
- •Image(X,y,colour) % Lighting pixel
- •Image(X,y-2*I,colour) % Lighting pixel
- •Image(X,y,colour) % Lighting pixel
- •Image(X-2*I,y,colour) % Lighting pixel
- •5.3. Перетворення
- •5.3.1. Геометричні перетворення
- •View(3);
- •5.3.2. Проекції тривимірного простору в
- •View(0,90);
- •View(3)
- •5.4. Вирізання
- •5.4.1. Алгоритми вирізання
- •5.4.2. Інші підходи
- •5.5. Зображення плоских кривих
- •5.5.1. Команда spline
- •5.5.2. Команда pchip
- •Список літератури
- •Покажчик
5.3. Перетворення
5.3.1. Геометричні перетворення
Цікавою ділянкою комп’ютерної графіки є перетворення, а саме – геометричні перетворення, які можна легко створювати за допомогою пакета Matlab у вигляді однойменних матриць.
Простір– 2D. Як зазначено, Matlab має функції, які охоплюють перетворення в 3Dпросторі, а для 2Dграфіки – ні. Один з виходів з цієї ситуації – робота в 3Dпросторі й відображення двовимірних об'єктів як тривимірних. Є ще можливість створити відповідну функцію, використовуючи лише 2Dпростір. Перша можливість є ліпша ніж друга, оскільки дає змогу застосувати перетворення для різних об’єктів без знання точок об’єкта. Нижче наведено приклад такої функції.
function R = strofi2D(theta)
R = [cos(theta) -sin(theta) 0;sin(theta) cos(theta) 0;0 0 1];
Для цієї функції вхідними параметрами є кут обертання в радіанах, а вихідними – 3 3 матриця обертання.
Простір – 3D. Одна з функцій, яка здатна обчислювати геометричні перетворення в 3Dпросторі – makehgtform. Недоліком: вона не охоплює перетворення симетрії в 3D, однак його можна ліквідувати досить просто, як описано в прикладах. Розглянемо спочатку команду Translate, яка виконує перенесення об’єкта в заданоу точку.
M = makehgtform('translate',[tx ty tz]) або M = makehgtform('translate',tx,ty,tz)
Тут Μ є точкою, а [ tx ty tz ] – вектором, який визначає нові координати, на які буде перенесена задана точка з початку координат.
Команду масштабування точки Scaling можна задати двояко
M = makehgtform('scale', s)
M = makehgtform('scale',[ sx, sy, sz ])
У першому випадку спочатку відбувається обчисленняя матриці перетворень, яка виконує масштабування з коефіцієнтом масштабування s для трьох осей. а в другому зазначено, що цей коефіцієнт є різним для кожної з осей.
Команда Rotation виконує обертання заданих точок навколо кожної з осей на кут, у радіанах:
M = makehgtform('xrotate',t) - обертання навколо осі x на кут t.
M = makehgtform('yrotate',t) - обертання навколо осі y на кут t.
M = makehgtform('zrotate',t) - обертання навколо осі z на кут t.
Для обчислення матриці будь-якого перетворення, яка утворюється внаслідок композиції базисних трансформацій, достатньо лише перемножити почерзі всі отримані матриці з makehgtform.
Якщо потрібно застосувати ці матриці-перетворення до об’єктів, то можна скористатись двома можливостями. Перша є до доцільна в разі простих форм, для яких відомо координати точок, а також шляхи, якими вони з’єднанні. Наприклад, для паралелепіпеда відомо вісім вершин, які належать шести площинам за відомих з’єднаннях між собою. Завдяки такому зображенню можна застосувати матриці перетворення в заданих точках для відображення нової форми, яка буде результатом цих перетворень. Такий метод є досить наочний для розуміння перетворень.
У випадку, якщо точки вихідної фігури невідомі? Треба використати другу можливість – застосувати команди hgtransform, set і axes для перетворень у будь-яку потрібну форму без спеціальних відомостей про її форму.
Команда hgtransform утворює групу об’єктів. Команда axes утворює осі, а команда set змінює параметри об’єкта. Всі описані нижче команди будуть використані й пояснені на окремих прикладах.
Наведемо приклад. Нехай треба
нарисувати трикутник з вершинами A(0,0),
B(1,0) і G(0,1), після чого повернути його на
кут
/2
з центром обертання у точці V. За позитивний
кут приймаємо той, що рухається проти
годинникової стрілки. Для такого типу
перетворення виконуємо три кроки:
переносимо центр обертання V у початок координат;
повертаємо трикутник на кут p/2 навколо початку координат;
переносимо точку V у вихідне положення.
Нехай матриця координат вершин така:
Тоді наступні команди матимуть вигляд
Points = [0 1 0 0; ...
0 0 1 0; ...
1 1 1 1];
plot (Points( 1 ,: ) , Points( 2 , :) );
M = [0 -1 1 ; ...
1 0 -1 ;...
0 0 1];
Points = M*Points ;
hold on
plot (Points( 1 ,: ) , Points( 2 , :),'r-' );
axis equal
Масив Points на початку містить координати заданої форми. Після перетворення отримаємо потрібний результат. На рис. 5.16 зображено перетворений об'єкт
Рис. 5.16. Перетворення трикутника
Тепер намалюємо лого Matlab на підставі M-файла, з попереднього параграфа, і після цього повернемо його на кут /2 навкола осі y. Використаємо вже описану функцію. За допомогою функції hgtransform створимо об’єкт, який можна легко присвоювати Matlab. Команди, виділені сірим кольором, є загальними для всіх програм. У рамці виділено перетворення, тут стільки перетворень, скільки операторів (рис.5.17):
L = 40 * membrane(1,25);
w = axes;
