HDU 4998

题意不写了,重点是学习神牛的向量旋转。


//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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值