.7а. Припускаючи, що операція з заповнення масивів проводиться після перевірки видимості, отримуємо, що при переході поточної кривою від видимого до невидимому стану (сегмент AB на рис. 10.7а), точка (X N + K, Y N + K) оголошується невидимою. Тоді ділянка кривої між точками (XN, YN) і (X N + K, Y N + K) незображується і операція з заповнення масивів не проводиться. Утворюється зазор між поточної і попередньої кривими. Якщо на ділянці поточної кривою відбувається перехід від невидимого стану до видимому (сегмент CD на ріс.10.7а), то точка (X M + K, Y M + K) оголошується видимої, а ділянка кривої між точками (XM, YM) і ( X M + K, Y M + K) змальовується і операція з заповнення масивів проводиться. Тому зображується і невидимий шматок сегмента CD. Крім того, масиви плаваючих горизонтів не міститимуть точних значень y. А це може спричинити за собою додаткові небажані ефекти для наступних кривих.
Отже, необхідно вирішувати задачу про пошук точок перетину сегментів поточної і попередньої кривих.
Існує кілька методів отримання точок перетину кривих. На растрових дисплеях значення координати x можна збільшувати на 1, починаючи з xn або xm (ріс.10.7а). Значення y, відповідне поточному значенням координати x у просторі зображення, виходить шляхом додавання до значення y, відповідному попередньому значенням координати x, вертикального збільшення? Y уздовж заданої кривої. Потім визначається видимість нової точки з координатами (x + 1, у + dy). Якщо це точка видимою, то активується пов'язаний з нею піксел. Якщо невидима, то пиксель не активується, а x збільшується на 1. Цей процес продовжується до тих пір, поки не зустрінеться x n + k або x m + k. Перетин для растрових дисплеїв визначаються викладеним методом з достатньою точністю.
Тепер алгоритм викладається більш формально.
Якщо поточної площині попри деякий заданому значенні x відповідне значення у на кривою більше максимуму менше мінімуму по y всім попередніх кривих при цьому, то поточна крива видимою. В іншому випадку вона невидима. Якщо на ділянці від попереднього (xn) до поточного (x n + k) значення x видимість кривою змінюється, то обчислюється точка перетину (xi). Якщо на ділянці від xn до x n + k сегмент кривої повністю бачимо, то він зображується цілком; якщо він став невидимим, то змальовується фрагмент від xn до xi; якщо він став видимим, то змальовується фрагмент від xi до x n + k. Заповнити масиви верхнього й нижнього плаваючих горизонтів.
Типовий результат роботи алгоритму:
2. Структура програми
Програма в основному складається з трьох основних частин:
. Функція обчислення значення функції в даних точках.
. Процедура розрахунку точок, які необхідно вивести на екран для отримання потрібного зображення.
. Інтерфейсна частина. Т.е та частина програми яка відповідає за правильне спілкування користувача з наданими йому можливостями.
Методи реалізації:
. Процедура обчислення значення отриманої точки по введеним в неї параметрами є, на мій погляд, тривіальної:
Процедура отримання значення функції
Передані параметри: X, Z
На виході: Y
Y=значення функції в точці (x, z)
Наприклад: Х=1, Z=1, F (x)=У=x ^ 2 + z ^ 2
Тоді при заданих значеннях X і Z отримаємо: Y=2.
. Процедура розрахунку точок, які необхідно вивести на екран для отримання потрібного зображення, полягає в тому, що для отримання точок, до координат X, Y, Z застосовується видове перетворення. Т.е точка з тривимірного простору переводиться в двовимірне (шляхом паралельного проектування):
Перед візуалізацією поверхні необхідно застосувати видове перетворення. Поверхня спочатку треба повернути на 30 градусів щодо осі Y, потім на який-небудь кут щодо осі X. Результат проектується на площину Z=0 з центру проекції, що знаходиться у нескінченності на осі + Z.
Т.е спочатку виходять точки в тривимірному просторі, а потім вони проектуються на площину ХОУ таким чином:
Хекрана=Хтрехмерний * cos (alfa) + Zтрехмерний * sin (alfa)
Yекрана=Хтрехмерний * sin (alfa) * sin (beta) + Yтрехмерний * cos (beta) -Zтрехмерний * sin (beta) * cos (alfa)
. Інтерфейсна частина реалізовується згідно потреб користувача в проробляє тієї чи іншої роботи з поверхнею і її заданими межами визначення.
3. Опис програми
Всі можливі настройки можна визначити шляхом натискання на кнопку ...