旋轉點問題(計算幾何模版)

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const double pi=acos(-1.0);
struct hh{
	double x,y;
};
hh zhuan(hh a,hh b,double p){//點a繞點b轉p度
	hh fuck;
	fuck.x=(a.x-b.x)*cos(p)-(a.y-b.y)*sin(p)+b.x;
	fuck.y=(a.x-b.x)*sin(p)+(a.y-b.y)*cos(p)+b.y;
	return fuck;
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		int n;
		scanf("%d",&n);
		hh a,b,aa;
		a.x=-1;a.y=-2;
		aa.x=-1;aa.y=-2;
		double k=0;
		double p;
		for (int i = 0; i < n;i++){
			scanf("%lf%lf%lf",&b.x,&b.y,&p);
			a=zhuan(a,b,p);
			k+=p;
			while(k>=2*pi) k-=2*pi;
		}
		double rx=((a.y-aa.y)*sin(k)+(aa.x+a.x)*cos(k)-(aa.x+a.x))/(2*cos(k)-2);//知道一個點aa和旋轉後的點a以及旋轉的角度求中心點
		double ry=((aa.y+a.y)*cos(k)-(a.x-aa.x)*sin(k)-(aa.y+a.y))/(2*cos(k)-2);
		printf("%.10f %.10f %.10f\n",rx,ry,k);	
	} 
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章