Advertisement
LegoSosiska

STUPID FRACTALS GRR

Sep 15th, 2022
1,013
2
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.52 KB | None | 2 0
  1. #include <SFML/Graphics.hpp>
  2. #include <SFML/Window.hpp>
  3. #include <algorithm>
  4. #include <iostream>
  5. #include <vector>
  6.  
  7. int main() {
  8.     sf::Font font;
  9.     if (!font.loadFromFile("Hack-regular.ttf")) {
  10.         std::cout << "NO FONT";
  11.         return 0;
  12.     }
  13.     sf::VertexArray dots(sf::LineStrip);
  14.     sf::RenderWindow window(sf::VideoMode(1000, 1000), "AA");
  15.     sf::Text left, right;
  16.     left.setFont(font);
  17.     left.setCharacterSize(50);
  18.     left.setFillColor(sf::Color::White);
  19.     left.setPosition(sf::Vector2f(800, 900));
  20.     left.setString("<");
  21.     right.setFont(font);
  22.     right.setCharacterSize(50);
  23.     right.setFillColor(sf::Color::White);
  24.     right.setPosition(sf::Vector2f(860, 900));
  25.     right.setString(">");
  26.  
  27.     sf::Vector2f sdot1(150, 700);
  28.     sf::Vector2f sdot2(500, 94);
  29.     sf::Vector2f sdot3(850, 700);
  30.    
  31.     dots.append(sdot1);
  32.     dots.append(sdot2);
  33.     dots.append(sdot3);
  34.     dots.append(sdot1);
  35.     int iteration = 0;
  36.  
  37.     while (window.isOpen()) {
  38.         sf::Event event;
  39.         while (window.pollEvent(event)) {
  40.             if (event.type == sf::Event::Closed){
  41.                 window.close();
  42.             }
  43.             if (event.type == sf::Event::MouseButtonPressed) {
  44.                 if (right.getGlobalBounds().contains(sf::Vector2f(event.mouseButton.x, event.mouseButton.y)) && iteration < 7) {
  45.                     sf::VertexArray dotsToReplace(sf::LineStrip);
  46.                     for (int i = 0; i < dots.getVertexCount() - 1; ++i) {
  47.                         dotsToReplace.append(dots[i]);
  48.                         sf::Vector2f edge(dots[i + 1].position - dots[i].position);
  49.                         sf::Vector2f perpend(edge.y, -edge.x);
  50.                         perpend.x /= 3.0;
  51.                         perpend.y /= 3.0;
  52.                         sf::Vector2f cent(float((dots[i].position.x + dots[i + 1].position.x) / 2.0),
  53.                             float((dots[i].position.y + dots[i + 1].position.y) / 2.0));
  54.                         sf::Vector2f dot1(dots[i].position + sf::Vector2f(edge.x / 3.0, edge.y / 3.0));
  55.                         sf::Vector2f dot2 = cent + perpend;
  56.                         sf::Vector2f dot3(dots[i].position + sf::Vector2f(edge.x * 2 / 3.0, edge.y * 2 / 3));
  57.  
  58.                         dotsToReplace.append(dot1);
  59.                         dotsToReplace.append(dot2);
  60.                         dotsToReplace.append(dot3);
  61.                     }
  62.                     dotsToReplace.append(dots[dots.getVertexCount() - 1]);
  63.  
  64.                     /*for (int ind = 0; ind < dotsToReplace.getVertexCount(); ++ind) {
  65.                         dotsToReplace[ind].color = color;
  66.                     }*/
  67.                     dots = dotsToReplace;
  68.                     ++iteration;
  69.                 }
  70.                 if (left.getGlobalBounds().contains(sf::Vector2f(event.mouseButton.x, event.mouseButton.y)) && iteration > 0) {
  71.                     sf::VertexArray dotsToReplace(sf::LineStrip);
  72.                     for (int i = 0; i < dots.getVertexCount(); i += 4) {
  73.                         dotsToReplace.append(dots[i]);
  74.                     }
  75.                     dots = dotsToReplace;
  76.                     --iteration;
  77.                 }
  78.             }
  79.            
  80.  
  81.             window.clear(sf::Color::Black);
  82.  
  83.            
  84.             window.draw(dots);
  85.             if (iteration > 0) {
  86.                 window.draw(left);
  87.             }
  88.             if (iteration < 7) {
  89.                 window.draw(right);
  90.             }
  91.             window.display();
  92.  
  93.         }
  94.     }
  95. }
Tags: C++ sfml
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement