Среда программирования:
Code::Blocks 16.01
Статья по теме:
Программа рисует фрактал Жулиа.
Код программы:
#include <SFML\Graphics.hpp> #include <SFML\Window.hpp> #include <iostream> #include <math.h> using namespace std; //Ширина и высота окна const int winW = 750; const int winH = 550; //Функция прорисовки фрактала void setFractal(sf::VertexArray & target_va) { float cRe = -0.70176 , cIm = -0.3842; // вещественная и мнимая части. float newRe, newIm, oldRe, oldIm; //Определяем число итераций и время работы. int maxIt = 300; for (int x = 0; x < winW; ++x) { for (int y = 0; y < winH; ++y){ //вычисляем реальную и мнимую часть //масштабирования и значения позиции newRe = 1.5 * (x - winW / 2) / (0.5 * winW); newIm = (y - winH / 2) / (0.5 * winH); //начинается процесс итерации int curr_it; for (curr_it = 0; curr_it < maxIt; ++curr_it) { //Запоминаем значение предыдущей итерации oldRe = newRe; oldIm = newIm; // в текущей итерации вычисляются действительная и мнимая части newRe = oldRe * oldRe - oldIm * oldIm + cRe; newIm = 2 * oldRe * oldIm + cIm; // условие прерывания if (newRe * newRe + newIm * newIm > 4) break; } sf::Vertex tmp; tmp.color = sf::Color((curr_it - 1 * 9) % 60, (curr_it - 1 * 9) % 60, (curr_it - 1 * 9) % 60, (curr_it - 1 * 9) % 150); tmp.position = sf::Vector2f(x, y); target_va.append(tmp); } } } int main() { sf::RenderWindow window(sf::VideoMode(winW, winH), "FRACTAL"); //окно программы sf::VertexArray va; //массив вершин va.setPrimitiveType(sf::Points); //рисуем точками setFractal(va); //функия вызова фрактала while (1) { sf::Event event; while (window.pollEvent(event)) { // События закрытия окну по клику на крестик и по нажатию Esc if (event.type == sf::Event::Closed || event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) return 0; } window.clear(sf::Color::Black); window.draw(va); window.display(); } return 0; }
Прикрепленный файл | Размер |
---|---|
FractalJulia.zip | 773 кб |