#ifndef OBS_H #define OBS_H #include #include #include #include "ast.h" #include class obs { public: void AddAsteroid (); bool InFree (float x, float y, float timeVar); void Display (window &w, float timeVar); void Display (ps_file &w, float timeVar); private: list obs; }; void obs::AddAsteroid () { random_source R; ast a; list l; for(int u = 0; u < 4; u++) { float x, y; R >> x; R >> y; x *= 10.0; y *= 10.0; //y=rand()%100/10.0; if (u != 0 && u != 3) { x = -x; } if (u > 1) { y = -y; } point poi (x, y); l.push (poi); } R >> a.x; R >> a.y; R >> a.xv; R >> a.yv; R >> a.theta; a.x *= 100; a.y *= 100; a.xv -= 0.5; a.yv -= 0.5; a.theta /= 10.0; polygon p (l, 1); a.p = p; obs.push (a); } bool obs::InFree (float x, float y, float timeVar) { ast tempAst; bool isIn = false; for(int i = 0; i < obs.size() && isIn == false; i++) { tempAst = obs[obs[i]]; isIn += tempAst.inside(x+100, y+000, timeVar); isIn += tempAst.inside(x+100, y-100, timeVar); isIn += tempAst.inside(x+000, y+100, timeVar); isIn += tempAst.inside(x+000, y+000, timeVar); isIn += tempAst.inside(x+000, y-100, timeVar); isIn += tempAst.inside(x-100, y+100, timeVar); isIn += tempAst.inside(x-100, y+100, timeVar); isIn += tempAst.inside(x-100, y-100, timeVar); } return !isIn; } void obs::Display (window &w, float timeVar) { for(int i = 0; i < obs.size(); i++) { polygon pp=obs[obs[i]].cp(timeVar); w.draw_filled_polygon (pp.translate(+100,+100), 1); w.draw_filled_polygon (pp.translate(+100,000), 1); w.draw_filled_polygon (pp.translate(+100,-100), 1); w.draw_filled_polygon (pp.translate(0000,+100), 1); w.draw_filled_polygon (pp.translate(0000,0000), 1); w.draw_filled_polygon (pp.translate(0000,-100), 1); w.draw_filled_polygon (pp.translate(-100,+100), 1); w.draw_filled_polygon (pp.translate(-100,0000), 1); w.draw_filled_polygon (pp.translate(-100,-100), 1); } } void obs::Display (ps_file &w, float timeVar) { for(int i = 0; i < obs.size(); i++) { polygon pp=obs[obs[i]].cp(timeVar); w.draw_filled_polygon (pp.translate(+100,+100), 1); w.draw_filled_polygon (pp.translate(+100,000), 1); w.draw_filled_polygon (pp.translate(+100,-100), 1); w.draw_filled_polygon (pp.translate(0000,+100), 1); w.draw_filled_polygon (pp.translate(0000,0000), 1); w.draw_filled_polygon (pp.translate(0000,-100), 1); w.draw_filled_polygon (pp.translate(-100,+100), 1); w.draw_filled_polygon (pp.translate(-100,0000), 1); w.draw_filled_polygon (pp.translate(-100,-100), 1); } } #endif