Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include <math.h>
- #include <iostream> //Debugging
- float rads(int);
- float Calculate_Y(float,int,int,int,int);
- const float pi = 3.14159;
- const int L_KNOB = 1;
- const int A_KNOB = 2;
- const int T_KNOB = 3;
- const int NIL = 0;
- class Application
- {
- public:
- sf::RenderWindow window;
- sf::Vector2f origin;
- sf::Event event;
- int L;
- int a;
- int t;
- Application()
- {
- window.create(sf::VideoMode(800,600,32), "Serie de Fourier");
- window.setFramerateLimit(30);
- origin.x = 75;
- origin.y = 300;
- L = 200;
- a = 5;
- t = 10;
- }
- void ChecarEventos()
- {
- while (window.pollEvent(event))
- {
- if (event.type == sf::Event::Closed)
- {
- window.close();
- }
- }
- }
- };
- class Grid
- {
- public:
- sf::Texture grid_texture;
- sf::Sprite grid_sprite;
- Grid()
- {
- grid_texture.loadFromFile("img/grid.png");
- grid_sprite.setTexture(grid_texture);
- }
- };
- class Sliders
- {
- public:
- int selected_knob;
- sf::Texture slider_texture;
- sf::Texture knob_texture;
- sf::Sprite L_slider_sprite;
- sf::Sprite a_slider_sprite;
- sf::Sprite t_slider_sprite;
- sf::Sprite L_knob_sprite;
- sf::Sprite a_knob_sprite;
- sf::Sprite t_knob_sprite;
- Sliders()
- {
- selected_knob = NIL;
- slider_texture.loadFromFile("img/slider.png");
- knob_texture.loadFromFile("img/knob.png");
- L_slider_sprite.setTexture(slider_texture);
- a_slider_sprite.setTexture(slider_texture);
- t_slider_sprite.setTexture(slider_texture);
- L_knob_sprite.setTexture(knob_texture);
- a_knob_sprite.setTexture(knob_texture);
- t_knob_sprite.setTexture(knob_texture);
- L_slider_sprite.setPosition(450,425);
- a_slider_sprite.setPosition(450,450);
- t_slider_sprite.setPosition(450,475);
- L_knob_sprite.setPosition(500,421);
- a_knob_sprite.setPosition(500,446);
- t_knob_sprite.setPosition(500,471);
- }
- void selectKnob(sf::RenderWindow &window)
- {
- sf::Vector2i mouse = sf::Mouse::getPosition(window);
- sf::Vector2f L_knob = L_knob_sprite.getPosition();
- sf::Vector2f a_knob = a_knob_sprite.getPosition();
- sf::Vector2f t_knob = t_knob_sprite.getPosition();
- if ((mouse.x > L_knob.x) && (mouse.x < (L_knob.x+7)) && (mouse.y > L_knob.y) && (mouse.y < (L_knob.y+15)))
- {
- selected_knob = L_KNOB;
- return;
- }
- else if ((mouse.x > a_knob.x) && (mouse.x < (a_knob.x+7)) && (mouse.y > a_knob.y) && (mouse.y < (a_knob.y+15)))
- {
- selected_knob = A_KNOB;
- return;
- }
- else if ((mouse.x > t_knob.x) && (mouse.x < (t_knob.x+7)) && (mouse.y > t_knob.y) && (mouse.y < (t_knob.y+15)))
- {
- selected_knob = T_KNOB;
- return;
- }
- }
- void Move(int knob, sf::RenderWindow &window)
- {
- sf::Vector2i mouse = sf::Mouse::getPosition(window);
- int x = mouse.x;
- int y = mouse.y;
- if (x < 455) x = 455;
- if (x > 645) x = 645;
- switch (knob)
- {
- case L_KNOB:
- L_knob_sprite.setPosition(x-3,L_knob_sprite.getPosition().y);
- break;
- case A_KNOB:
- a_knob_sprite.setPosition(x-3,a_knob_sprite.getPosition().y);
- break;
- case T_KNOB:
- t_knob_sprite.setPosition(x-3,t_knob_sprite.getPosition().y);
- break;
- default:
- break;
- }
- }
- };
- int main()
- {
- Application app;
- Grid grid;
- Sliders sliders;
- sf::VertexArray points(sf::Points, 700);
- while (app.window.isOpen())
- {
- app.ChecarEventos();
- if (sf::Mouse::isButtonPressed(sf::Mouse::Left) && sliders.selected_knob == NIL)
- {
- sliders.selectKnob(app.window);
- }
- else if (!sf::Mouse::isButtonPressed(sf::Mouse::Left))
- {
- sliders.selected_knob = NIL;
- }
- if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
- {
- sliders.Move(sliders.selected_knob,app.window);
- }
- app.L = (sliders.L_knob_sprite.getPosition().x - 300);
- app.a = (sliders.a_knob_sprite.getPosition().x - 495)*3;
- app.t = ((sliders.t_knob_sprite.getPosition().x - 490)/5);
- for (int i=0, j=0;i<app.L;i++,j++)
- {
- points[j].position = sf::Vector2f((app.origin.x + i),Calculate_Y(app.origin.y,i,app.L,app.a,app.t) );
- points[j].color = sf::Color(0,0,0);
- }
- app.window.clear(sf::Color(200,200,150));
- app.window.draw(grid.grid_sprite);
- app.window.draw(sliders.L_slider_sprite);
- app.window.draw(sliders.a_slider_sprite);
- app.window.draw(sliders.t_slider_sprite);
- app.window.draw(sliders.L_knob_sprite);
- app.window.draw(sliders.a_knob_sprite);
- app.window.draw(sliders.t_knob_sprite);
- app.window.draw(points);
- app.window.display();
- }
- return 0;
- }
- float rads(int degree)
- {
- return degree*(3.14159/180);
- }
- float Calculate_Y(float origin, int x, int L, int a, int t)
- {
- double Z = 0;
- for (int n = 1; n <= 100; n++)
- {
- double An = ((4 * pow(L, 2)) / pow((n * M_PI), 3)) * (1 + pow(-1, n));
- double Bn = ((4 * pow(L, 3)) / (a * pow((n * M_PI), 4))) * (1 - pow(-1, n));
- double zn = (An * cos((n * M_PI * a)/ L) * t) + (Bn * sin((n * M_PI * a)/ L) * t);
- Z = Z + ( zn * sin((n * M_PI * x) / L));
- }
- Z /= -1000;
- return origin + Z;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement