Среда программирования:
Code::Blocks 16.01
Статья по теме:
Программа рисует фрактал "Слово Фибоначчи".
Код программы:
#include <math.h> #include <string> using namespace std; //ширина и высота const int winW = 750; const int winH = 550; //глубина const int depth = 23; void setFractal(int x, int y, int len, int it, sf::VertexArray & target_va) { string s; // получаем строку Фибоначчи на n итерации string s1 = "1"; string s2 = "0"; for (int i = 0; i < it - 2; ++i) { s = s2 + s1; s1 = s2; s2 = s; } if (it == 1) { s = "1"; } else { s = s2; } //теперь s - наша строка int vx = 0, vy = -1;// начальный вектор (0,-1) то есть вверх int x1 = x; int y1 = y; int x2, y2, temp; for (int i = 0; i < s.length(); i++) { x2 = x1 + len * vx; //проводим сегмент длины а в направлении вектора (vx,vy) y2 = y1 + len * vy; sf::Vertex tmp_x, tmp_y; tmp_x.color = tmp_y.color = sf::Color::Yellow; tmp_x.position = sf::Vector2f(x1, y1); tmp_y.position = sf::Vector2f(x2, y2); target_va.append(tmp_x); target_va.append(tmp_y); x1 = x2; y1 = y2; if (s[i] == '0') { if (i % 2 == 0) {// поворот налево temp = vx; vx = -1 * vy; vy = temp; } else {// поворот направо temp = vx; vx = vy; vy = -1 * temp; } } } } int main() { sf::RenderWindow window(sf::VideoMode(winW, winH), "FRACTAL"); //устанавливаем окно sf::VertexArray va; //массив вершин va.setPrimitiveType(sf::Lines); //рисуем типом линия setFractal(50, winH - 100, 1, depth, 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; }
Прикрепленный файл | Размер |
---|---|
FIBO_WORD.zip | 774.42 кб |