янь:
В
Перетворимо дану систему в матрицю розміром 4Х4.
В
Знайдемо визначник даної матриці по першому рядку. Так як дана система рівнянь має нетривіальне рішення, то визначник даної матриці дорівнює 0. В результаті отримуємо:
Nx =, Ny =, Nz =.
Значення d для визначення координат вектора не потрібно. Отже, координати вектора нормалі мають вигляд:
Nx = Ay (Bz - Cz) + By (Cz - Az) + Cy (Az - Bz);
Ny = Az (Bx - Cx) + Bz (Cx - Ax) + Cz (Ax - Bx);
Nz = Ax (By - Cy) + Bx (Cy - Ay) + Cx (Ay - By).
Залишилось привести вектор нормалі до одиничної довжині, так як для визначення косинуса кута між векторами простіше використовувати одиничні вектори. Для цього слід визначити довжину вектора і розділити на неї кожну координату. Для кожної грані при ініціалізації об'єкту потрібно порахувати вектор нормалі, привести до одиничної довжині і зберегти його координати в структурі відповідної грані. Крім того, при кожному повороті сцени вектори нормалі потрібно теж перераховувати (але перспективну проекцію знаходити не слід). p> Для реалізації даного алгоритму нам буде потрібно тільки координата Nz. Значення отримаємо за формулою: Nz = Nz/(Корінь (Nx * Nx + Ny * Ny + Nz * Nz)). p> Якщо Nz> 0, то грань не видно, якщо Nz <0, то грань видна. Так як у нас на сцені є прозорий об'єкт, у якого повинні промальовуватися всі грані, то виконаємо обидві умови на перевірку видимості граней. br/>
2.4 Зафарбування тривимірного об'єкта з використанням простої моделі висвітлення
Так як розрахунок нормалей в нашій сцені ми вже реалізували, то додати освітлення до наших об'єктів вже не складе великих проблем. Крім освітленості будемо одночасно зафарбовувати отримані поверхні об'єктів. Ідея алгоритму полягає в наступному: будемо зафарбовувати кожну грань об'єкта, помноживши значення заданого колірного каналу (A, R, G, B) на значення координати Z вектора нормалі. Колір і налаштування прозорості у об'єктів різне, але система кольорів одна, тому задамо попередньо значення альфа-каналу для граней куба повністю непрозорими - 255, а для граней склянки значення визначимо такі: 80 для бічних граней, і 100 для підстави склянки. Чим більше значення Nz буде наближатися до одиниці, тим менше буде кут між нормаллю і променем світла і тим відповідно більше буде інтенсивність кольору. p align="justify"> Для зафарбовування полігонів скористаємося стандартною функцією зафарбовування - FillPolygon. Дана функція заповнює внутрішню частину полігону, що визначається масивом точок, один з двох параметрів даної функції відповідає за колір зафарбовування. У підсумку отримуємо найпростішу, але ефектну систему освітлення. br/>
3. Опис програми
3.1 Введені типи даних та їх призначення