Guest User

Untitled

a guest
Jan 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.07 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <vector>
  6. #include <SFML/Graphics.hpp>
  7. #include <svector.h>
  8. using namespace std;
  9. using namespace skn;
  10.  
  11. typedef sf::Color Col;
  12. typedef sf::Shape S;
  13. typedef Vector<double,2> Charge;
  14. typedef Vector<double,2> Vec;
  15.  
  16. static const Charge
  17.     red  (cos(0*M_PI/3),sin(0*M_PI/3)),
  18.     green(cos(2*M_PI/3),sin(2*M_PI/3)),
  19.     blue (cos(4*M_PI/3),sin(4*M_PI/3));
  20.  
  21. struct Particle { Vec r, v, a; double m; Charge q; sf::Shape shape; };
  22.  
  23. int main(int argc, char ** argv)
  24. {
  25.     double dt = 1e-4, G = 1, t = 0;
  26.     int skip = 1000;
  27.     sf::RenderWindow App(sf::VideoMode(1000, 1000, 32), "Color");
  28.     sf::View view(sf::Vector2f(0,0),sf::Vector2f(25,25));
  29.     App.SetView(view);
  30.     Particle p[] = {
  31.         {Vec(-10, 0.25),Vec(0,0),Vec(0,0),1, red,  S::Circle(0,0,0.2,Col(255,  0,  0))},
  32.         {Vec(-10,-0.25),Vec(0,0),Vec(0,0),1, green,S::Circle(0,0,0.2,Col(  0,255,  0))},
  33.         {Vec(- 9, 0.00),Vec(0,0),Vec(0,0),1, blue, S::Circle(0,0,0.2,Col(  0,  0,255))},
  34.  
  35.         {Vec( 10,-0.60),Vec(0,0),Vec(0,0),1,-green,S::Circle(0,0,0.2,Col(255,  0,255))},
  36.         {Vec( 10, 0.40),Vec(0,0),Vec(0,0),1,-blue, S::Circle(0,0,0.2,Col(255,255,  0))},
  37.         {Vec(  9, 0.00),Vec(0,0),Vec(0,0),1,-red,  S::Circle(0,0,0.2,Col(  0,255,255))},
  38.  
  39.         {Vec(  0, 10.0),Vec(0,0),Vec(0,0),1, green,S::Circle(0,0,0.2,Col(  0,255,  0))},
  40.         {Vec(  1,  9.0),Vec(0,0),Vec(0,0),1, red,  S::Circle(0,0,0.2,Col(255,  0,  0))},
  41.         {Vec(  3,  9.0),Vec(0,0),Vec(0,0),1, blue, S::Circle(0,0,0.2,Col(  0,  0,255))},
  42.     };
  43.     int n = sizeof(p)/sizeof(Particle);
  44.  
  45.     for(int k = 0;; k++)
  46.     {
  47.         for(int i = 0; i < n; i++)
  48.         {
  49.             p[i].v += p[i].a * dt;
  50.             p[i].r += p[i].v * dt;
  51.             p[i].a = 0;
  52.         }
  53.         for(int i = 0; i < n; i++)
  54.             for(int j = i+1; j < n; j++)
  55.             {
  56.                 Vec r = p[j].r-p[i].r;
  57.                 Vec f = -r*(G*dot(p[i].q,p[j].q)*pow(abs(r),-0.5));
  58.                 p[i].a += f/p[i].m;
  59.                 p[j].a -= f/p[j].m;
  60.             }
  61.         if(k%skip == 0)
  62.         {
  63.             for(int i = 0; i < n; i++)
  64.             {
  65.                 p[i].shape.SetPosition(p[i].r[0],p[i].r[1]);
  66.                 App.Draw(p[i].shape);
  67.             }
  68.             App.Display();
  69.             sf::Sleep(0.001);
  70.         }
  71.     }
  72. }
Add Comment
Please, Sign In to add comment