Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2015
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.12 KB | None | 0 0
  1. #include "pugixml.hpp"
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <algorithm> //do sortowania
  6. #include <cmath> //do sqrt() – pierwiastek
  7.  
  8. using namespace std;
  9. using namespace pugi;
  10.  
  11.  
  12. struct Frame
  13. {
  14.  
  15.     struct Pos
  16.     {
  17.         float x; // Współrzędna x (wzdłuż ulicy)
  18.         float y;
  19.         float w;
  20.     } pos; // Pozycja (odczytana z pliku)
  21.  
  22.     struct Vel
  23.     {
  24.         float vx; //predkosc po x
  25.         float vy; //predkosc po y
  26.         float vw; //predkosc wypadkowa
  27.     } vel;
  28.     struct ael
  29.     {
  30.         float ax; //predkosc po x
  31.         float ay; //predkosc po y
  32.         float aw; //predkosc wypadkowa
  33.     } ael;
  34.     struct zel
  35.     {
  36.         float zx; //predkosc po x
  37.         float zy; //predkosc po y
  38.         float zw; //predkosc wypadkowa
  39.     } zel;
  40. };
  41.  
  42. int maxx(vector<Frame> w)
  43. {
  44.     double a = 0;
  45.     int b = 0;
  46.     int x = 0;
  47.     for (unsigned i = 0; i<w.size(); i++)
  48.     {
  49.         if (w[i].vel.vw>a)
  50.         {
  51.             a = w[i].vel.vw;
  52.             x = b;
  53.  
  54.         }
  55.         b++;
  56.     }
  57.     return x;
  58. };
  59.  
  60.  
  61.  
  62. class Samochod
  63. {
  64. public:
  65.     vector<Frame> ramki; //wektor ramek pojazdu
  66.     static const int dt = 40; //odległość w czasie między kolejnymi ramkami w ms
  67.     int numer; //numer pojazdu, w końcu mamy to posortować wiec się przyda
  68.     double v_max; //predkosc max
  69.     bool load(string name) //wczytaj z pliku
  70.     {
  71.         xml_document doc;
  72.         xml_parse_result result;
  73.         result = doc.load_file(name.c_str()); //wczytywanie pliku
  74.         if (result.status != status_ok) //sprawdzenie
  75.             return false;
  76.         xml_node root = doc.first_child();
  77.         xml_node frames = root.first_child();
  78.         xml_node frame = frames.first_child();
  79.         xml_node pos = frame.child("pos");
  80.         Frame ramka;
  81.         unsigned i = 0;
  82.         while (true)
  83.             //wczytywanie z xml do naszej struktury
  84.         {
  85.             if (i)frame = frame.next_sibling();
  86.             pos = frame.child("pos");
  87.             i++;
  88.             if (!frame) break;
  89.             ramka.pos.x = atof(pos.child("x").child_value());
  90.             ramka.pos.y = atof(pos.child("y").child_value());
  91.             ramka.pos.w = sqrt(ramka.pos.x*ramka.pos.x + ramka.pos.y*ramka.pos.y);
  92.             //liczenie wypadkowej -> pierwiastek z sumy kwadratow
  93.             ramki.push_back(ramka);
  94.         }
  95.        
  96.         }
  97.         bool nowy_brumbrum(string name, int number)
  98.         {
  99.             if (!load(name)) return false;
  100.             numer = number;
  101.             calc_inst_vel();
  102.             calc_max_vel();
  103.             calc_acc();
  104.             zmiany_ruchu();
  105.             return true;
  106.         }
  107.  
  108.     bool wprint(unsigned a, unsigned b)
  109.     {
  110.         if (a>b || a>ramki.size() || b >= ramki.size())
  111.             return false;
  112.         for (unsigned i = a; i <= b; i++)
  113.     if
  114.             cout << "pomiar" << i << "\n"<<" pozycja x \t" << ramki[i].pos.x  << "\n pozycja x \t" << ramki[i].pos.y  << "\n predkosc x \t" << ramki[i].vel.vx  << "\n predkosc y \t" << ramki[i].vel.vy  << "\n predkosc w \t" << ramki[i].vel.vw  << "\n przyspieszenie \t" << ramki[i].ael.aw << "\n tg skretu \t" << ramki[i].zel.zw  << endl;
  115.        
  116.         return true;
  117.     }
  118.     void wprint()
  119.     {
  120.        
  121.         for (unsigned i = 0; i<ramki.size(); i++)
  122.        
  123.                 cout <<"pomiar " <<i<<"\n"<< " pozycja x \t" << ramki[i].pos.x  << "\n pozycja y \t" << ramki[i].pos.y  << "\n predkosc x \t" << ramki[i].vel.vx  << "\n predkosc y \t" << ramki[i].vel.vy  << "\n predkosc w \t" << ramki[i].vel.vw  << "\n przyspieszenie \t" << ramki[i].ael.aw  << "\n tg skretu \t"<<ramki[i].zel.zw << endl;
  124.        
  125.     }
  126.     void calc_acc() //przyspieszenie
  127.     {
  128.         ramki[0].ael.ax = 0;
  129.         ramki[0].ael.aw = 0;
  130.         for (unsigned i = 1; i < ramki.size(); i++)
  131.         {
  132.             ramki[i].ael.ax = 40 * (ramki[i].vel.vx - ramki[i - 1].vel.vx) / dt;
  133.             ramki[i].ael.ay = 40 * (ramki[i].vel.vy - ramki[i - 1].vel.vy) / dt;
  134.             double a = ramki[i].ael.ax*ramki[i].ael.ax +
  135.                 ramki[i].ael.ay*ramki[i].ael.ay;
  136.             ramki[i].ael.aw = sqrt(a);
  137.         }
  138.     }
  139.     void calc_inst_vel() //policz predkosc w kolejnych ramkach
  140.     {
  141.         ramki[0].vel.vx = 0; //zakladam ze predkosc poczatkowa =0
  142.         ramki[0].vel.vy = 0;
  143.         ramki[0].vel.vw = 0;
  144.         for (unsigned i = 1; i<ramki.size(); i++)
  145.         {
  146.             ramki[i].vel.vx = 40 * (ramki[i].pos.x - ramki[i - 1].pos.x) / dt;
  147.             ramki[i].vel.vy = 40 * (ramki[i].pos.y - ramki[i - 1].pos.y) / dt;
  148.             double a = ramki[i].vel.vx*ramki[i].vel.vx +
  149.                 ramki[i].vel.vy*ramki[i].vel.vy;
  150.             ramki[i].vel.vw = sqrt(a);
  151.         }
  152.  
  153.     }
  154.     void  zmiany_ruchu()//zmiana kierunku
  155.     {
  156.         ramki[0].zel.zx = 0; //zakladam ze predkosc poczatkowa =0
  157.         ramki[0].zel.zy = 0;
  158.         ramki[0].zel.zw = 0;
  159.         for (unsigned i = 1; i<ramki.size(); i++)
  160.         {
  161.             ramki[i].zel.zx = 40 * (ramki[i].pos.x - ramki[i - 1].pos.x) / dt;
  162.             ramki[i].zel.zy = 40 * (ramki[i].pos.y - ramki[i - 1].pos.y) / dt;
  163.             double a = ramki[i].zel.zx*ramki[i].zel.zx /
  164.                 ramki[i].zel.zy*ramki[i].zel.zy;
  165.             ramki[i].zel.zw = sqrt(a);
  166.         }
  167.     }
  168.     void calc_max_vel() //znajdz predkosc max
  169.     {
  170.         v_max = ramki[maxx(ramki)].vel.vw;
  171.     }
  172.  
  173.  
  174. };
  175. bool sortuj1(Samochod a, Samochod b)
  176. {
  177.     return a.v_max<b.v_max;
  178. }
  179.  
  180. void sortuj(vector<Samochod> &samochody)
  181. {
  182.     sort(samochody.begin(), samochody.end(), sortuj1);
  183. }
  184.  
  185. int main()
  186. {
  187.     vector<Samochod> brumbrumki;
  188.    
  189.     for (unsigned i = 0;; i++)
  190.     {
  191.        
  192.         cout << "POJAZD" << i<< "\n";
  193.         Samochod brumbrumek;
  194.    
  195.         string name = "pojazd";
  196.         name += to_string(i + 1);
  197.         name += ".xml";
  198.        
  199.         if (!brumbrumek.nowy_brumbrum(name.c_str(), i + 1)) break;
  200.         brumbrumki.push_back(brumbrumek);
  201.         brumbrumek.wprint();
  202.  
  203.     }
  204.  
  205.     cin.ignore(1);
  206.     exit(-1);
  207.    
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement