#include "type.h" obstacle::obstacle(){ x = 0; y = 0; xi = 0; yi = 0; r =0; } obstacle::obstacle(const obstacle & o){ poly = o.poly; x = o.x; y = o.y; xi = o.xi; yi = o.yi; r = o.r; } obstacle::obstacle(polygon p){ poly = p; x = 0; y = 0; r = 0; fix(); } obstacle::obstacle(polygon p, double a, double b, double c){ poly = p; x = a; y = b; r = c; fix(); } void obstacle::fix(){ point p; double tx, ty; double midx, midy; double xmin = 10000000; double xmax = -10000000; double ymin = 10000000; double ymax = -10000000; forall_vertices(p, poly){ tx = p.xcoord(); ty = p.ycoord(); if(tx < xmin){ xmin = tx; } if(tx > xmax){ xmax = tx; } if(ty < ymin){ ymin = ty; } if(ty > ymax){ ymax = ty; } } midx = (xmax+xmin)/2; midy = (ymax+ymin)/2; poly = poly.translate(-midx, -midy); xi = midx; yi = midy; } polygon obstacle::body(double t){ double a, b; polygon temp; a = x*t + xi; b = y*t + yi; a = (double)(((int)a % 100)) + (a - (double)((int)a)); b = (double)(((int)b % 100)) + (b - (double)((int)b)); if(a < 0){ a = 100 + a; } if(b < 0){ b = 100 + b; } temp = poly.rotate(r*t); temp = temp.translate(a,b); return(temp); } istream& operator>>(istream& is, obstacle& n){ is >> n.poly; return(is); } ostream& operator<<(ostream& os, const obstacle& n){ os << n.poly; return(os); }