Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pugixml.hpp"
- #include <iostream>
- #include <vector>
- #include <string>
- #include <algorithm>
- #include <cmath>
- #include <conio.h>
- using namespace std;
- using namespace pugi;
- struct Frame
- {
- //Pozycja
- struct Pos
- {
- float x;
- float y;
- float w;
- } pos;
- //Prędkosc
- struct Vel
- {
- float vx;
- float vy;
- float vw;
- } vel;
- //Przyspieszenie
- struct Acc
- {
- float accx;
- float accy;
- float accw;
- } acc;
- string opis;
- };
- //KONIEC STRUKTUR
- //Predkosc maksymalna
- int vmax(vector<Frame> w)
- {
- double a=0;
- int b=0;
- int x=0;
- for (unsigned i=0; i<w.size(); i++)
- {
- if(w[i].vel.vw>a)
- {
- a=w[i].vel.vw;
- x=b;
- }
- b++;
- }
- return x;}
- class Samochod
- {
- public:
- vector<Frame> ramki; //Wektor ramek samochodu
- static const int dt=40; //Co 40ms
- int numer; //Numer pojazdu
- double v_max;
- //Wczytanie z pliku i sorawdzanie -if
- bool load(string name)
- {
- xml_document doc;
- xml_parse_result result;
- result=doc.load_file(name.c_str());
- if(result.status!=status_ok)
- return false;
- xml_node root=doc.first_child();
- xml_node frames=root.first_child();
- xml_node frame=frames.first_child();
- xml_node pos=frame.child("pos");
- Frame ramka;
- unsigned i=0;
- //Wczytanie XML'a
- while(true)
- {
- if (i)frame=frame.next_sibling();
- pos=frame.child("pos");
- i++;
- if(!frame) break;
- ramka.pos.x=atof( pos.child("x").child_value() );
- ramka.pos.y=atof( pos.child("y").child_value() );
- ramka.pos.w=sqrt( ramka.pos.x*ramka.pos.x + ramka.pos.y*ramka.pos.y); //wypadkowa
- ramki.push_back(ramka);
- }
- return true;
- }
- bool wprint(unsigned a, unsigned b)
- {
- if( a>b || a>ramki.size() || b>=ramki.size() )
- return false;
- for (unsigned i=a;i<=b;i++)
- cout<<ramki[i].pos.x<<" \t "<<ramki[i].pos.y<<" \t "<<ramki[i].vel.vx<<" \t "<<ramki[i].vel.vy<<" \t "<<ramki[i].vel.vw<<" \t "<<ramki[i].opis<<endl;
- return true;
- }
- void wprint()
- {
- for (unsigned i=0;i<ramki.size();i++)
- cout<<ramki[i].pos.x<<" \t "<<ramki[i].pos.y<<" \t "<<ramki[i].vel.vx<<" \t "<<ramki[i].vel.vy<<" \t "<<ramki[i].vel.vw<<" \t "<<ramki[i].opis<<endl;
- }
- //Policzenie predkosci
- void calc_inst_vel()
- {
- ramki[0].vel.vx=0;
- ramki[0].vel.vy=0;
- ramki[0].vel.vw=0;
- for (unsigned i=1; i<ramki.size(); i++)
- {
- ramki[i].vel.vx=25*(ramki[i].pos.x-ramki[i-1].pos.x)/dt;
- ramki[i].vel.vy=25*(ramki[i].pos.y-ramki[i-1].pos.y)/dt;
- double a = ramki[i].vel.vx*ramki[i].vel.vx +
- ramki[i].vel.vy*ramki[i].vel.vy;
- ramki[i].vel.vw=sqrt(a);
- }
- }
- //Predkosc maksymalna
- void calc_max_vel()
- {
- v_max=ramki[vmax(ramki)].vel.vw;
- }
- bool nowy_pojazd(string name, int number)
- {
- if(!load(name)) return false;
- numer=number;
- calc_inst_vel();
- calc_max_vel();
- //calc_acc();
- //zmiany_ruchu();
- return true;
- }
- };
- //KONIEC KLASY SAMOCHOD
- bool sortuj_1(Samochod a, Samochod b)
- {
- return a.v_max<b.v_max;
- }
- void sortuj_2(vector<Samochod> &samochody)
- {
- sort(samochody.begin(), samochody.end(), sortuj_1);
- }
- int main()
- {
- cout<<"hello";
- vector<Samochod> pojazdy;
- //Odczytanie XML'i
- for (unsigned i=0;;i++)
- {
- Samochod pojazd;
- string name=" pojazd";
- name+=to_string(i+1);
- name+=".xml";
- if(!pojazd.nowy_pojazd(name.c_str(), i+1)) break;
- pojazdy.push_back(pojazd);
- }
- //Wywolanie sortowania
- sortuj_2 (pojazdy);
- //Wyswietlenie
- for (int j=0; j>=pojazdy.size(); j++)
- {
- pojazdy[j].wprint();
- _getch();
- }
- _getch();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement