Advertisement
Guest User

Untitled

a guest
May 21st, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.77 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <iostream>
  3. #include <ctime>
  4. #include <cmath>
  5. #include <math.h>
  6. #include <cstdlib>
  7. #include <utility>
  8.  
  9.  
  10. #include "BarnsleyFern.h"
  11. #include "SierpinskiTriangle.h"
  12. #include "SierpinskiSquare.h"
  13. //#include "RecursiveTree.h"
  14.  
  15. void MorphInto(Fractal& fracToMorph,
  16.                const Fractal& finalFrac,
  17.                int steps,
  18.                sf::RenderWindow& window,
  19.                const float XWINDOW,
  20.                const float YWINDOW);
  21.  
  22. int main(int argc, char ** argv){
  23.  
  24.     const float X_WINDOW = 1200;
  25.     const float Y_WINDOW = 800;
  26.     int ITERATION = 0;
  27.     bool animation = false;
  28.  
  29.  
  30.  
  31.     sf::RenderWindow window(sf::VideoMode(X_WINDOW, Y_WINDOW), "Fractals", sf::Style::Default | sf::Style::Titlebar | sf::Style::Close);
  32.    
  33.    
  34.    
  35.     const BarnsleyFern constFern(X_WINDOW, Y_WINDOW);
  36.     const SierpinskiTriangle constSierp(X_WINDOW, Y_WINDOW);
  37.  
  38. // fraktal paproć
  39.  
  40.     BarnsleyFern barnsley_fern(X_WINDOW, Y_WINDOW);
  41.     // barnsley_fern.PrintXY();
  42.    
  43.  // fraktal trojkat sierpinskiego
  44.     //SierpinskiTriangle sierpTriangle(X_WINDOW, Y_WINDOW);
  45.  
  46.  // fraktal kwadrat sierpinskiego
  47.     //SierpinskiSquare sierpSq(X_WINDOW, Y_WINDOW);
  48.  
  49. // fraktal drzewo rekursywne
  50.     //Tree recursiveTree(X_WINDOW,Y_WINDOW,45.0f, 20.0f);
  51.  
  52.  
  53.  
  54.     sf::Event event;
  55.     srand(time(NULL));
  56.  
  57.     std::cin.get();
  58.    
  59.  
  60.     while(window.isOpen())
  61.     {
  62.         ITERATION++;
  63.        
  64.         while (window.pollEvent(event))
  65.         {
  66.             // Close window: exit
  67.             if (event.type == sf::Event::Closed) {
  68.                 window.close();
  69.             }
  70.            
  71.             // Escape pressed: exit
  72.             if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) {
  73.                 window.close();
  74.             }
  75.         }
  76.  
  77.        
  78.          
  79.  
  80.        // std::cout << ITERATION << std::endl;
  81.        
  82.         if(animation == false){
  83.             //sierpSq.DrawFractal(window, ITERATION);
  84.  
  85.             //sierpTriangle.DrawFractal(window, ITERATION);    
  86.              barnsley_fern.DrawFractal(window, ITERATION);  
  87.  
  88.              //recursiveTree.DrawFractal(window, ITERATION);
  89.            
  90.             if(ITERATION == ITERATION_MAX){
  91.                 //sierpSq.DrawWholeFractal(window);
  92.                 //sierpTriangle.DrawWholeFractal(window);
  93.                 barnsley_fern.DrawWholeFractal(window);
  94.                 //recursiveTree.DrawWholeFractal(window);
  95.  
  96.                 std::cout << "KONIEC GENEROWANIA PAPROCI, TERAZ MORFUJEMY W FRAKTAL SIERPINSKIEGO [ENTER]" << std::endl;
  97.                 std::cin.get();
  98.                
  99.                 animation = true;
  100.                 ITERATION = 0;
  101.             }
  102.         }
  103.         else if(animation == true){
  104.                
  105.                 MorphInto(barnsley_fern, constSierp, 155, window, X_WINDOW,Y_WINDOW);
  106.                 std::cin.get();
  107.                
  108.                 MorphInto(barnsley_fern, constFern, 125, window, X_WINDOW,Y_WINDOW);
  109.                
  110.                 std::cout << "KONIEC MORFOWANIA" << std::endl;
  111.                 std::cin.get();
  112.         }
  113.          
  114.        
  115.        
  116.  
  117.                
  118.  
  119.            
  120.        
  121.  
  122.         } // end of while window is open
  123.    
  124.  
  125.     return 0;  
  126.  
  127. } // end of main
  128.  
  129.  
  130.  
  131.  
  132. void MorphInto(Fractal& fracToMorph, const Fractal& finalFrac, int steps, sf::RenderWindow& window, const float XWINDOW, const float YWINDOW){
  133.     std::cout << "Wolana funkcja MorhpInto"<< std::endl;
  134.     // SierpinskiTriangle* currentFractal = new SierpinskiTriangle(XWINDOW,YWINDOW);
  135.     std::pair<double, double>* step = new std::pair<double, double>[ITERATION_MAX];
  136.  
  137.     for(unsigned j = 0; j < ITERATION_MAX; j++){
  138.         step[j].first = (finalFrac.GetX(j) - fracToMorph.GetX(j)) / (steps);
  139.         step[j].second = (finalFrac.GetY(j) - fracToMorph.GetY(j)) / (steps);
  140.     }
  141.  
  142.  
  143.     for(int iteration = 0; iteration < steps; ++iteration){
  144.         // dla kazdego fraktalu
  145.         for(int j = 1; j < ITERATION_MAX; ++j){
  146.             fracToMorph.GetX(j) += step[j].first;
  147.             fracToMorph.GetY(j) += step[j].second;
  148.  
  149.  
  150.             /*  KOLOROWANIE  */
  151.  
  152.                 // sf::Color currentColor = sf::Color(
  153.                 // static_cast<int>(fracToMorph.m_point.getPosition().y + j) % 256,
  154.                 // 100,
  155.                 // static_cast<int>(fracToMorph.m_point.getPosition().x + 2 * j) % 256);
  156.  
  157.                 // fracToMorph.m_point.setOutlineColor(currentColor);
  158.         }
  159.  
  160.         window.clear();
  161.         //std::cout << "Obecnie morfowany fraktal w iteracji numer : " << iteration << std::endl;
  162.         fracToMorph.DrawWholeFractal(window);
  163.         //std::cin.get();
  164.  
  165.     }
  166.    
  167.    
  168.     // fern.DrawFractal(window,iter);
  169.  
  170.  
  171.     delete[] step;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement