坐标变换(其二)( 202309-2

#include <bits/stdc++.h>
using namespace std;
double k[100010]={0};
double o[100010]={0};

int main() {
	int n,m;
	cin>>n>>m;
	for(int i=0;i<100010;i++)k[i]=1;
	vector<pair<int,double> >a;
	a.push_back({0,0});
	for(int i=1;i<=n;i++){
		int m1;
		double m2;
		cin>>m1>>m2;
		a.push_back({m1,m2});
		if(m1==1){
			k[i]=m2;
		}else o[i]=m2;
	}
	for(int i=1;i<=n;i++){
		k[i]=k[i]*k[i-1];
		o[i]=o[i]+o[i-1];
	}
	//cout<<k[1]<<" "<<o[1];
	//cout<<"1"<<endl;
	
	double sum1=0,sum2=0;
	for(int i=0;i<m;i++){
		int a1,a2;
		double b1,b2;
		cin>>a1>>a2>>b1>>b2;
//		cout<<"k[a2]="<<k[a2]<<" k[a1-1]="<<k[a1-1]<<endl;
//		cout<<"o[a2]="<<o[a2]<<" o[a1-1]="<<o[a1-1]<<endl;
		sum1=k[a2]/k[a1-1];
		sum2=o[a2]-o[a1-1];
		//cout<<sum1<<" "<<sum2<<endl;
//1 1
//1 0.716
//1 1 159430 -511187
				double x=b1,y=b2;
				b1=x*cos(sum2)-y*sin(sum2);
				b2=x*sin(sum2)+y*cos(sum2);
				b1=b1*sum1;
				b2=b2*sum1;
		
				

		
		printf("%.3lf %.3lf\n",b1,b2);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值