Створення тривимірного ландшафту, Вчись!
Тривимірна графіка складна для побудови багатьох моделей вручну. Багато моделей складаються з великої кількості граней, і створити їх вручну практично неможливо. Тому для великої кількості моделей використовуються алгоритми, що генерують такі моделі.
Наприклад, тривимірна поверхня землі може складатися з кількох сотень та тисяч граней.

Для отримання такої поверхні можна використовувати алгоритм серединного усунення, який описує фрактал Плазма. Цей алгоритм дозволяє створювати такі зображення:

А вже по цих зображеннях можна створити тривимірну проекцію поверхні. Чорний колір визначає найвищу точку. Білий – найнижчу, чи навпаки. Це зображення складається з відтінків сірого і тому всі висоти знаходяться в проміжку (0;255)
Наша мета написати програму, яка б генерувала такі зображення і створювати тривимірні поверхні у форматі VRML. Ми будемо використовувати цей формат тривимірних файлів, оскільки його дуже легко використовувати у програмуванні.
Програмувати будемо в системі Lazarus - вона безкоштовна і заснована на мові Паскаль, це дозволяє дуже легко її освоїти і так само для Lazarus існує тривимірний ігровий движок на VRML, що дозволяє працювати з цими моделями в Lazarus.
Перше, що має робити ця програма – це генерувати зображення плазми. Алгоритм полягає в тому, що ми беремо квадрат і випадково генеруємо висоти в кутах. Висота в даному випадку – це колір пікселя в кутку квадрата. Далі будемо обчислити значення висот на сторонах, ці висоти дорівнюватимуть підлозі сумі висот на кінцях сторони. Значення висоти в центрі дорівнюватиме середньоарифметичному значенню в кутах квадрата і плюс деякеусунення, яке залежатиме від розміру квадрата.
Тепер приступимо до створення самої програми. Створимо проект в Lazarus і розмістимо на ньому панель, на якій будуватимемо фрактал плазма. На малюнку панель має синій колір. Дизайн програми можна вибирати за бажанням, великої ролі у програмі він не грає.

І створимо кнопку для випадкової генерації. І додамо поле Edit, в якому ми будемо ставити розмір сторони квадрата.
Для генерації будемо використовувати рекурсивну функцію, яка виконуватиме сама себе, зменшуючи квадрат до мінімуму.
Алгоритм отримання плазми знайти в інтернеті нескладно, тому не винаходитимемо велосипед і візьмемо готовий код: