- •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
- •Список літератури
- •Покажчик
Image(X,y1,colour) % Lighting pixel
end
else if abs(dy) <= abs(dx)
if x2 < x1
t = x1;
x1 = x2;
x2 = t;
t = y1;
y1 = y2;
y2 = t;
end
% 1,4,5 and 8 oktant
if (dy < 0 & dx > 0) | (dy > 0 & dx < 0)
d = 1;
end
dx = abs(dx);
dy = abs(dy);
x = x1;
y = y1;
c1 = 2*dy;
sfalma = 2*dy-dx ;
c2 = sfalma-dx;
while x <= x2
if d == 0
Image(X,y,colour) % Lighting pixel
else
Image(X,y-2*I,colour) % Lighting pixel
end
x = x+1;
if sfalma < 0
sfalma = sfalma+c1;
else
y = y+1;
i = i+1;
sfalma = sfalma+c2;
end
end
else
if y2 < y1
t = x1;
x1 = x2;
x2 = t;
t = y1;
y1 = y2;
y2 = t;
end
% 2,3,6 and 7 oktant
if (dy < 0 & dx > 0) | (dy > 0 & dx < 0)
d = 1;
end
dx = abs(dx);
dy = abs(dy);
x = x1;
y = y1;
c1 = 2*dx;
sfalma = 2*dx-dy ;
c2 = sfalma-dy;
while y <= y2
if d == 0
Image(X,y,colour) % Lighting pixel
else
Image(X-2*I,y,colour) % Lighting pixel
end
y = y+1;
if sfalma < 0
sfalma = sfalma+c1;
else
i = i+1;
x = x+1;
sfalma = sfalma+c2;
end
end
end
end
end
Алгоритм Брезенгейма для кола. Для побудови кіл чи еліпсів нема готової функції, тому насправді рисується багатокутник з великою кількістю сторін, які наближаються до кола чи еліпса. Інколи достатньо використати 40 вершин.
Алгоритм Брезенгейма для побудови кіл такий:
function brescircle(center,r,colour)
x = 0;
y = r;
sfalma = 3 - 2 * r;
hold on
while x <= y
image(x + center(1),y + center(2),colour)
image(y + center(1),x + center(2),colour)
image(x + center(1),-y + center(2),colour)
image(y + center(1),-x + center(2),colour)
image(-x + center(1),y + center(2),colour)
image(-y + center(1),x + center(2),colour)
image(-x + center(1),-y + center(2),colour)
image(-y + center(1),-x + center(2),colour)
x = x + 1;
if sfalma >= 0
y = y - 1;
sfalma = sfalma - 4 * y;
end
sfalma = sfalma + 4 * x + 2;
end
axis equal
Алгоритм Капеллі для еліпса:
function kappel(center,a,b,colour)
hold on
xc = center(1);
yc = center(2);
x = a;
y = 0;
asqr = a ^ 2;
bsqr = b ^ 2;
a22 = 2 * asqr;
b22 = 2 * bsqr;
xslope = b22 * a;
yslope = 0;
fmid = bsqr * (0.25 - x) + asqr;
while (xslope > yslope)
image(x + xc,y + yc,colour)
image(-x + xc,y + yc,colour)
image(x + xc,-y + yc,colour)
image(-x + xc,-y + yc,colour)
y = y + 1;
yslope = yslope + a22;
if fmid >= 0
x = x - 1;
xslope = xslope - b22;
fmid = fmid - xslope;
end
fmid = fmid + yslope + asqr;
end
fmid = fmid -(yslope + xslope) / 2 + 0.75 * (bsqr - asqr);
while(x > =0)
image(x + xc,y + yc,colour)
image(-x + xc,y + yc,colour)
image(x + xc,-y + yc, colour)
image(-x + xc,-y + yc, colour)
x = x - 1;
xslope = xslope - b22;
if fmid <= 0
y = y + 1;
yslope = yslope + a22;
fmid = fmid + yslope;
end
fmid = fmid - xslope + bsqr;
end
axis equal
Застосування алгоритмів. Нехай поставлене завдання побудувати лінію (рис. 5.13), яка проходить через точки (0,0) і (50,70). Для цього використаємо команду
>> blin(0,0,50,70,47)
Для побудови кола з центром у точці (0,0) та радіусом 25 (рис. 5.14), можна використати команду
>> brescircle([0 0],25,56)
За допомогою алгоритму Капеллі будують еліпс з центром у точці (3,8) та осями, які відповідають значенням a= 23 та b=17 (рис. 5.15), використовуючи відповідну команду
>>kappel([3 8],23,17,47),
Рис. 5.13. Лінія Рис. 5.14. Коло Рис. 5.15. Еліпс
