Контрольная работа: Графічні роботи на комп’ютері

У залежності від кута нахилу прямої виконується цикл по осі x або по y (мал. 2).


Мал. 2. Загальна схема алгоритму виводу відрізка прямої лінії

Наведемо приклад запису цього алгоритму на комп'ютерній мові програмування С, С++. Для скорочення тексту розглянемо фрагмент програми, де виконується цикл по осі х, причому x1>x2:

for (x=x1; x<=x2; x++)

{

y=y1+((x-x1)*(y2-y1))/(x2-x1);

//Піксел (x, y);

}

Тут усі операції виконуються над цілими числами. Подвійні скобки необхідні для того, щоб ділення виконувалося після множення. Недоліки такої програми — в циклі виконується багато зайвих операцій, присутні операції ділення та множення. Це обумовлює малу швидкість, роботи. Щодо зайвих операцій у циклі. Можна винести обчислення (у2‑у1)/(х2‑х1) за межі циклу, оскільки це значення не змінюється. Однак для цього необхідно вже використовувати операції над числами у форматі з плаваючою точкою:

float k;// або double чи long double

k = (float) (y2-y1) / (float) (x2-x1);

for (x = x1; x <= x2; x++)

{

y = y1 + (float) (x – x1) * k;

// Піксел (x, y);

}

Оскільки ми вирішили використати формат із плаваючою точкою, то спробуємо ще зменшити кількість операцій у циклі. Якщо розкрити дужки у виразі у = у1 + (х – х1) k; то' отримаємо у = у1 + х k – х1 k. Тут значення (y1- x1 k) є константою — ці операції також винесемо за межі циклу.

float yy, k;

k = (float) (y2 – y1) / (float) (x2-x1);

yy = (float) y1 – (float) x1*k;

for (x = x1; x <= x2; x++)

{

y = yy + (float) x*k;

// Піксел (x, y);

}

У циклі виконуються тільки дві арифметичні операції й перетворення х із цілого у формат float.

Якщо розглядати цикл обчислення у, по відповідних значеннях хі = х1, х1 +1, ..., х2 як ітеративний процес, то можна поставити таке запитання: чому дорівнює різниця (yi+1 –yi)? Вона дорівнює yi+1‑yi=x1+(xi+1‑x1)k‑x1‑(xi‑x1)k=(xi+1‑xi)k=k; оскільки xi+1‑xi=1. Різниця (yi+1 –yi) є константою, яка дорівнює k. Виходячи з цього, можна побудувати цикл таким чином:

float k;

К-во Просмотров: 345
Бесплатно скачать Контрольная работа: Графічні роботи на комп’ютері