Малювання фракталів, основи програмування
Дана програма здійснює побудову і отрисовку трьох найбільш відомих «класичних» фракталів -Kam Torus, безліч Джулії і безліч Мандельброта.
Фрактал - математичне поняття, що означає абстрактний образ, побудований за принципом самоподібності за допомогою алгебраїчних рівнянь.
Програма по заданих рівнянь розраховує значення, приводить їх до форми, придатної для відображення на екрані в певному кольорі, і потім малює по ним зображення. Щоб побудувати з математичного виразу графічне зображення, програма розраховує багато значень х і у, а потім в обумовлених ними точках екрану ставить крапки або малює лінії. Нижче докладно розглядається побудова всіх трьох фракталів.
Фрактал Kam Torus
Фрактал Kam Torus малює послідовність торів -Поверхня 1-го порядку, що мають в тривимірному просторі форму бублика, проте в нашому двомірному випадку, що представляє собою подобу еліпса. Графік Kam Torus породжується накладенням рядів точок в орбіті, що генеруються набором рівнянь, в яких змінна на кожному кроці збільшується на одиницю. Три рівняння, керуючі малюванням мають такий вигляд:
x (0) = y (0) = orbit / 3
x (n + 1) = x (n) * cos (a) + (x 2 - y (n)) * sin (a)
y (n + 1) = x (n) * sin (a) + (x 2 - y (n)) * cos (a)
Після кожного проходу циклу значення orbit отримує деяке фіксоване збільшення. Параметри, що задають поведінку функції, включають в себе кут а (в радіанах), величину кроку для змінної orbit, кінцеве значення цієї змінної і кількість точок на орбіту, що задає число проходів циклу.
При кожному запуску програми (або при кожному перемальовуванні вмісту вікна) графіки, побудовані процедурою DrawKamTorus (), будуть змінюватися, оскільки для створення початкових значень рівнянь використовуються випадкові числа.
безліч Джулії
На відміну від фрактала Kam Torus, фрактал безліч Джулії (як і розглянутий нижче безліч Мандельброта) не використовує генератор випадкових чисел. Це безліч породжує свій фрактал виходячи з відомих початкових значень. Безліч Джулії може бути генерувати шляхом зміни в процесі опису безлічі Мандельброта. Для опису безлічі Джулії потрібно почати з заданого значення C, комплексного числа (в формі a + (b * i)). Початкове значення Z також відповідає такому комплексному числу. Дійсна частина даного числа відповідає координаті x, а уявна координаті y, помноженої на i (уявну одиницю). Щоб намалювати фрактал, потрібно послідовно застосувати рівняння Z (n + 1) = Z (n) ^ 2 + C для кожного із значень Z з ряду (0, ..., n).
Для кожної точки комплексної площини існує своє безліч Джулії, тобто існує нескінченне число різних множин Джулії. Але найбільш цікаві візуально Бувай отримані з таких значень C, для яких образ М-безлічі (тобто спорідненого точкового безлічі Мандельброта) найбільш щільний.
безліч Мандельброта
Фрактали, що визначаються безліччю Мандельброта, є найвідомішими і "знаменитими". Це безліч, як і безліч Джулії малює фрактал на його рівняння, використовуючи комплексні числа і зумовлені відправні точки.
Незважаючи на популярність і загальне визнання, безліч Мандельброта залишається просто графіком: горизонтальна (х) і вертикальна (у) координати представляють області зміни двох незалежних величин. У двовимірному поданні для передачі різних рівнів третьої величини, що залежать від двох перших, використовують колір.
Так само, як і в безлічі Джулії, вісь х знову представляє дійсні числа, а вісь у - уявні. Отже, фрактал починається від будь-якої точки комплексної площини - C, комплексної константи. Потім береться інше комплексне число, яке вже може змінюватися - Z. Щоб побудувати фрактал, слід почати з Z = 0 і обчислювати вираз фрактала наступним чином:
Z (n) = plot
Z (n + 1) = Z ^ 2 + C
У цьому виразі проводиться ітерація функції Z (n + 1) = Z (n) ^ 2 + C. Для деяких значень С результат через деякий час "вирівнюється". Для інших він безмежно зростає.
Нижче додається вихідний код файлу, що містить функції для безпосереднього малювання фракталів у вікні за допомогою GDI. Повний же код проекту зі скомпільованому exe-файлом знаходиться в прикріпленому архіві.
Малювання фракталів, Kam Torus, безліч Джулії, безліч Мандельброта