- •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.2.4 Примітиви
Лінія. У разі малювання ліній з використанням команди plot треба знати, чи вона є повністю в інтервалі, який хочемо зобразити в Matlab. Нехай потрібно відобразити лінію ΑΒ з точками A(3,4) і B(6, 7). Єдине, що треба зробити – надрукувати в командному вікні: plot([3 6],[4 7]). Є також інший шлях: patch([3 6],[4 7],[0 0 0]).
У другому випадку ми не можемо вибирати кольору для малювання ліній, вони будуть чорними за замовчуванням. Тому набагато зручніше використовувати команду plot.
Можна також застосувати алгоритм Брезенхема. Звичайно, це може призвести до непрердбачених проблем. Унаслідок автоматичного регулювання осями Matlab не дає більш працювати з пік селями. Якщо є бажання, то можна дати користувачу ілюстрацію піксельного рисунка У цьому випадку, якщо треба працювати з пікселями, ліпше використовувати іншу мову програмування.
Коло, еліпс, багатокутник. Для того, щоб намалювати коло, немає готової функції, тому, насправді рисують багатокутник з великою кількістю вершин, які наближатимуть нас до кола. Інколи достатньо використати 40 вершин.
Передусім треба вирішити, який тип буде використано для координат точок. Ліпше працювати з параметричним рівнянням кола, яке задається рівняннями:
,
тут
і
– центр кола з радіусом
.
Розібємо інтервал [0,2π] на 40 вузлів, набравши в командному вікні рядок t = 0: 2*pi/40:2*pi; або використавши команду linspace(0,2*pi,50), що виконує ті ж дії.
Наступний крок – обчислимо
координати точок еліпса попередньо
задавши фіксовані значення
.
x = r * sin( t ) + xo; y = r * cos( t ) + yo,
На завершення використаємо команду plot для створення відповідної форми. Після натискання на клавішу enter відкриється нове вікно, яке буде містити коло.
Як зазначено, форма залежить від осей. Для створення кола треба додати команду axis equal.
Якщо потрібно нарисувати круг і замалювати кольором, замість команди plot можна використати команду patch. Наприклад, якщо треба нарисувати круг зеленого кольору, достатньо записати patch( x,y,[0 1 0]).
Для спрощення процесу
створення низки кіл, достатньо створити
М-функцію, яка вхідними параметрами
матиме центр кола і радіус. Вихідними
параметрами будуть координати
точок кола.
Створення еліпса аналогічне до створення кола. Єдина різниця полягає в параметричних рівняннях еліпса. Зразок програми для створення еліпса наведено в розділі 1.
Багатокутник створюютьнарисуванням його ліній за допомогою команди plot. Якщо багатокутник потрібно заповнити, використовують команду patch.
3D об’єкти. Для рисування 3D об’єктів застосовують команду patch. Опишимо цю команду детальніше. Щоб нарисувати одиничний куб, треба виконати такі дії. Спочатку записати вершини 3D об’єкта в формі масиву, де кожний рядок має три стовпці, які відповідають їхнім координатам. Кожна вершина має порядковий номер. Наприклад, вершина з координатами (0,0,0) має порядковий номер -1, а (0,1,1) – номер 8. Після цього створюють ще одну таблицю зв’язку, яка містить вектор порядкових номерів вершин, що належать кожній грані куба.
Нехай треба нарисувати два одиничні куби, де перший з вершиною в початку координат (0,0,0), порядковий номер якої – 1, і має спільну вершину з другим кубом у точці з координатами (1,1,1), порядковий номер якої 2, для другого куба. Для цього запишемо такий М-файл.
vertex_matrix = [ 0 0 0;1 0 0;1 1 0;0 1 0;... % 1
0 0 1;1 0 1;1 1 1;0 1 1]; % 2
faces_matrix = [1 2 6 5;2 3 7 6;3 4 8 7;... % 3
1 5 8; 1 2 3 4; 5 6 7 8]; % 4
patch('Vertices',vertex_matrix,'Faces',faces_matrix) % 5
hold on % 6
v = [ 1 1 1;2 1 1;2 2 1;1 2 1;... % 7
1 1 2;2 1 2;2 2 2;1 2 2]; % 8
patch('Vertices',v,'Faces',faces_matrix, 'FaceVertexCData'... % 9
,[1 0 0],'FaceColor','flat') % 10
