//FOR 4 GATES #include #include #include #include #include #include #include using namespace std; const double MAX_HEIGHT = 4.0; const double Y_MIN = -0.75; const double Y_MAX = 0.75; const double ROBOT_RADIUS = 0.203; //const double IDEAL_LENGTH = 4.3376; const double OVERLAP = 0.8; double rand(double a, double b){ return a+double(rand())/double(RAND_MAX)*(b-a); } //rounds to _num_ to the nearest _unit_ double round(double num, double unit){ return rint(num/unit)*unit; } void gen_course(double &x1, double &y1, double &x2, double &y2, double &x3, double &y3, double &x4, double &y4){ x1=1; // double a2=rand(0,0.75); //x2=x1+0.75+a2; //x3=x2+0.75+rand(0,0.75-a2); //x4=rand(x3+0.75,MAX_HEIGHT); //split the 0.75m of free space randomly // 0 0.75(15x0.05) // |--------'------'-------| // m1 m2 // t1 t2 int t1=rand()%15+1; int t2=rand()%15+1; if(t20) sign =1.0; double overlap=0.0; overlap=sign*y1; sign*=-1; overlap+=sign*(y2-y1); sign*=-1; overlap+=sign*(y3-y2); sign*=-1; overlap+=sign*(y4-y3); sign*=-1; return overlap; } /*double course_len(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){ double sign=1; if(y1<0) sign=-1; y1+=sign*ROBOT_RADIUS; sign*=-1; y2+=sign*ROBOT_RADIUS; sign*=-1; y3+=sign*ROBOT_RADIUS; sign*=-1; return dist(0,0,x1,y1)+ dist(x1,y1,x2,y2)+ dist(x2,y2,x3,y3)+ dist(x3,y3,x4,y4); }*/ void convert_xy(double x, double y, int& xb, int&yb){ xb=int(x*10); yb=int((y+1)*20); } void draw(double x1, double y1, double x2, double y2, double x3, double y3, double x4, double y4){ int xb1, yb1, xb2, yb2, xb3, yb3, xb4, yb4; convert_xy(x1,y1,xb1,yb1); convert_xy(x2,y2,xb2,yb2); convert_xy(x3,y3,xb3,yb3); convert_xy(x4,y4,xb4,yb4); vector buffer= vector(41,string(41,' ')); int dir=1; if(y1<0) dir=-1; for(int i=0;i<=40;i++){ buffer[0][i]='#'; buffer[i][0]='#'; buffer[40][i]='#'; buffer[i][40]='#'; } if(dir==1) for(int i=0; i<=yb1;i++) buffer[xb1][i]='*'; else for(int i=40; i>=yb1;i--) buffer[xb1][i]='*'; dir*=-1; if(dir==1) for(int i=0; i<=yb2;i++) buffer[xb2][i]='*'; else for(int i=40; i>=yb2;i--) buffer[xb2][i]='*'; dir*=-1; if(dir==1) for(int i=0; i<=yb3;i++) buffer[xb3][i]='*'; else for(int i=40; i>=yb3;i--) buffer[xb3][i]='*'; dir*=-1; for(int i=0; i<=yb4-7;i++) buffer[xb4][i]='*'; //g4 for(int i=40; i>=yb4+7;i--) buffer[xb4][i]='*'; //g4 for(int i=yb4-7; i<=yb4+7;i++) buffer[xb4][i]=' '; //out buffer[0][20]='0'; reverse(buffer.begin(),buffer.end()); for(int i=0;i=2) srand(atoi(argv[1])); else srand(time(0)); double x1,x2,x3,x4,y1,y2,y3,y4; double len; double overlap; do{ gen_course(x1,y1,x2,y2,x3,y3,x4,y4); //len=course_len(x1,y1,x2,y2,x3,y3,x4,y4); overlap=y_overlap(x1,y1,x2,y2,x3,y3,x4,y4); //}while(fabs(len-IDEAL_LENGTH)>IDEAL_LENGTH*0.01); }while(fabs(overlap-OVERLAP)>=0.05); draw(x1,y1,x2,y2,x3,y3,x4,y4); cout<