题意不写了,重点是学习神牛的向量旋转。
//poj 3036
//poj 3041
//poj 1328
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
#define LL long long
const double PI = 3.141592653;
struct point{
double x,y;
point(double a = 0,double b = 0){x = a; y = b;}
};
typedef point vector;
vector operator - (point a,point b) {
return vector(a.x - b.x,a.y - b.y);
}
vector rotation(vector A,double rad) {
return vector(A.x*cos(rad)-A.y*sin(rad), A.x*sin(rad)+A.y*cos(rad) );
}
int main() {
int t;scanf("%d",&t);
while(t--) {
int n;scanf("%d",&n);
point a(0,0);
double sum = 0,rad;
for(int i = 0; i < n; i++) {
point b; scanf("%lf %lf %lf",&b.x,&b.y,&rad);
sum += rad;
vector A = b - a;
vector B = rotation(A,rad);
a = b - B;
}
while(sum - 2.0*PI > 1e-8) sum -= 2.0*PI;
double c = a.x - a.y*sin(sum)/(1.0-cos(sum));
double d = 1.0 - cos(sum) + sin(sum)*sin(sum)/(1.0-cos(sum));
double x = c/d;
double y = (x*sin(sum)+a.y)/(1-cos(sum));
printf("%.9lf %.9lf %.9lf\n",x,y,sum);
}
return 0;
}