- •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
- •Список літератури
- •Покажчик
View(3);
s = surface(L, 'EdgeColor' , 'none', 'FaceColor' , [1 0 0], ...
'FaceLighting', 'phong', 'AmbientStrength', 0.3, ...
'DiffuseStrength', 0.6, 'Clipping', 'off ', ...
'BackFaceLighting', 'lit', 'SpecularStrength', 1.1, ...
'SpecularColorReflectance', 1 , 'SpecularExponent', 7);
t = hgtransform('Parent', w);
set(s, 'Parent',t);
Rz = makehgtform('yrotate', pi/2);
set(t, 'Matrix', Rz);
hold on
s = surface(L, 'EdgeColor' , 'none', 'FaceColor' , [0 1 0], ...
'FaceLighting', 'phong', 'AmbientStrength', 0.3, ...
'DiffuseStrength', 0.6, 'Clipping', 'off ', ...
'BackFaceLighting', 'lit', 'SpecularStrength', 1.1, ...
'SpecularColorReflectance', 1 , 'SpecularExponent', 7);
Рис. 5.17. Вихідне положення - зверху, результат – внизу.
У разі використання симетрії, виділений у рамці оператор буде замінений відповідною матрицею. Перед утворенням об’єкта необхідно помістити рисунок в змінну S, в іншому випадку не отримаємо потрібного результату. Якщо вже маємо один графік, то його треба перемістити в ту саму змінну і це можна зробити так:
vertex = [0 1 1 0 0 0 1 1;
0 0 1 1 1 0 0 1;
0 0 0 0 1 1 1 1];
facesm = [1 2 3 4;5 6 7 8;3 4 5 8;1 2 7 6;2 3 8 7;1 4 5 6];
hold on
h(1)= patch('Vertices',vertex','Faces',facesm,'FaceVertexCData',...
[0 0 1],'FaceColor','flat')
h(2)= plot3([0,0],[0,1],[1.8 1.8]);
Якщо цікавлять двовимірні об’єкти, які хочемо утворити за допомогою команд hgtransform і makehgtform, то в цьому випадку треба уявляти, що працюєте в тривимірному просторі. Наприклад, у разі потреби перенести якусь точку в іншу з координатами (x, y) її треба перенести в точку з координатами (x, y,0). Якщо передбачено поворот, то це буде поворот навкола осі z.
Перетворення осей. Команда makehgtform обчислює таблиці геометричних перетворень. Підсумком команди makehgtform є відповідні таблиці перетворення осей. Навіть якщо використовувати перетворення осей або геометричні перетворення, то остаточний результат (матриця перетворень) повинен бути той самий.
5.3.2. Проекції тривимірного простору в
Розглянемо площинні проекції та з їхнє використанням в Matlab Ці проекції можна розділити на дві головні категорії. До першої належать центральні проекції, в яких відстань від центру проекції до проекційної площини є скінченою, до другої – паралельні проекції, у яких відстань від центра проектування до площини проектування нескінченна.
Ці категорії повинні задовольняти такі властивості:
лінії після перетворення переходять у лінії;
відстань загалом змінюються;
паралельні лінії перестають бути паралельними після проектування, вони перетинаються в певних точках збіжності.
кути між лініями не змінюються, якщо задана площина паралельна до площини проектування.
Центральна проекція. Вважаємо, що проекційною площиною може бути екран комп’ютера, на якому треба відобразити нескінченну кількість точок тривимірного об’єкта. Для цього можна використати лінійну апроксимацію об’єктів у тривимірному просторі за допомогою відрізків прямих та плоских багатокутників. У цьому випадку, як зазначено вище, прямі після перспективного перетворення переходять у прямі на проекційній площині. Завдяки цій властивості центральної перспективи можна проектувати (обчислювати) лише для граничні точки відрізків, а потім з’єднувати проекції точок лініями вже на проекційній площині.
Розглянемо точку
,
що розміщена за проекційною площиною
на відстані
,
і її проекцію на екран
.
Розташуємо спостерігача в точці
,
що на осі
на
відстані
від екрана (проекційної площини) з
координатами
.
Нехай координати точки
на екрані є
.
У цьому випадку перетворення не є лінійними, тому для використання їх у Matlab буде застосуємо таку матрицю:
така, що
,
де (x,y,z) координати точки на площині xOy. Нам залишається лише нормалізувати вектор, унаслідок чого отримаємо
.
Для цього треба виконати такі кроки:
перемістити центр проекції на вісь z;
обернути об’єкт, так, щоб споглядання відбувалось з xy;
застосувати матрицю перетворень для центральної проекції.
Паралельні проекції. Такі проекції поділяють на дві великі категорії – ортогональні та косокутні. Розглянемо визначення косокутних проекцій. Для цього використаємо теорію. Маємо матрицю перетворень, яка передбачає проекцію на площину xy.
,
а координати точок проекції задають рівняннями
.
Таблицю для ортогональних проекцій обчислюють при d = 0.
Проекції в MATLAB. Найпростіший шлях для побудови проекцій у Matlab – це шлях за якому ми зберігаємо дві матриці, одна з яких є матрицею проекції, а друга – матрицею, яка містить координати об’єкта, який маємо намір перетворювати. Недоліками цього підходу – утруднена побудова другої матриці, що апотребує великих затрат пам’яті. Для того, щоб оминути ці труднощі, можна використати програму, про яку згадано у розділі про перетворення. У випадку попередньо запропонованого методу, можна застосувати команду hgtransform без виклику програми про побудову проекцій матриць, як це робили за допомогою команди makehgtform під час перетворень. Отже, ми постійно повинні створювати нову функцію, яка будує потрібні нам матриці. Функція, яку використовують для побудови паралельних проекцій, може мати такий вигляд
function M = par_proj(a,fi)
d = 1/tan(a);
M = [1 0 d * cos(fi) 0;
0 1 d * sin(fi) 0;
0 0 0 0;
0 0 0 1];
Ця функція вхідними параметрами
має два кути фігури
і
(fi) (обидва в радіанах). Отже, для створення
проекції Кабіне одиничного кубу (рис.
5.18) на площині xy,
можна використати результати наступного
М-файлу.
На рис.5.19 зображено результат вищенаведеної
програми.
ax = axes;
x = [0 1 1 0 0 0 1 1 0 0 1 1 1 1 0 0];
y = [0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 1];
z = [0 0 0 0 0 1 1 1 1 1 1 0 0 1 1 0];
h=plot3(x,y,z);
t = hgtransform('Parent',ax);
set(h,'Parent',t);
M = par_proj(63*pi/180,pi/6);
set(t,'Matrix',M);
