#include #include #include #include using namespace std; double r,w,t; char buf[500]; const double eps = 1e-8; const double pi = acos(-1.0); struct Point { double x,y; Point() {} Point(double _x,double _y) { x = _x; y = _y; } Point(Point _a,Point _b) { x = _b.x-_a.x; y = _b.y-_a.y; } void transXY(double B) { double tx = x,ty = y; x = tx*cos(B) - ty*sin(B); y = tx*sin(B) + ty*cos(B); } double Length() { return sqrt(eps+x*x+y*y); } }; int cmp(double a,double b) { if (fabs(a-b) < eps) return 0; if (a < b) return -1; return 1; } double sqr(double a) { return a*a; } Point p[4],res[4]; int main() { int ft = 0; while (true) { gets(buf); if (strlen(buf) == 1) break; sscanf(buf,"%lf%lf%lf%lf%lf%lf%lf%lf",&p[0].x,&p[0].y,&p[1].x,&p[1].y,&p[2].x,&p[2].y,&p[3].x,&p[3].y); scanf("%lf%lf%lf",&r,&t,&w); gets(buf); w = pi*w/180; double theta = w*t; theta = theta-2*pi*floor(theta/(2*pi)); double l = r*w*t; double totl = 0; Point tv; for (int i = 0; i < 4; i++) { tv = Point(p[i],p[(i+1)%4]); totl += tv.Length()-2*r; } res[0] = p[0]; for (int i = 1;i < 4;i++) { tv = Point(p[i-1],p[i]); tv.transXY(-theta); res[i] = Point(res[i-1].x+tv.x,res[i-1].y+tv.y); } l = l-totl*floor(l/totl); double pre = 0.0,len; Point prep,nowp,xp; tv = Point(p[0],p[1]); len = tv.Length(); xp = Point(p[0].x+tv.x*r/len,p[0].y+tv.y*r/len); prep = Point(xp.x+tv.y*r/len,xp.y-tv.x*r/len); for (int i = 0; i < 4; i++) { tv = Point(res[i],res[(i+1)%4]); len = tv.Length(); if (cmp(pre+len-2*r,l) >= 0) { l -= pre; l += r; xp = Point(res[i].x+tv.x*l/len,res[i].y+tv.y*l/len); nowp = Point(xp.x+tv.y*r/len,xp.y-tv.x*r/len); tv = Point(nowp,prep); for (int j = 0;j < 4;j++) res[j] = Point(res[j].x+tv.x,res[j].y+tv.y); break; } pre += len-2*r; } ft++; printf("Case %d:",ft); for (int i = 0;i < 4;i++) printf(" %.3f %.3f",res[i].x,res[i].y); printf("\n"); } return 0; }