B - Counterclockwise Rotation(计算几何)

严亮
2023-12-01

B - Counterclockwise Rotation(计算几何)

给定直角坐标求逆时针旋转 d d d 后的坐标。

可以转极坐标。

一开始没注意 counterclockwise 是逆时针的意思qwq

( x , y ) → ( r cos ⁡ α , r sin ⁡ α ) , r = x 2 + y 2 , α = arctan ⁡ ( y x ) (x,y)\rightarrow (r\cos\alpha ,r \sin \alpha),r=\sqrt{x^2+y^2},\alpha =\arctan(\dfrac{y}{x}) (x,y)(rcosα,rsinα),r=x2+y2 ,α=arctan(xy)

cpp的话用 a t a n 2 ( y , x ) atan2(y,x) atan2(y,x) 函数比 a t a n ( y / x ) atan(y/x) atan(y/x) 更好。

因为 a t a n 2 atan2 atan2 支持第1到4象限,且包含 x = 0 x=0 x=0的特殊情况。

// Problem: B - Counterclockwise Rotation
// Contest: AtCoder - AtCoder Beginner Contest 259
// URL: https://atcoder.jp/contests/abc259/tasks/abc259_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
// Date: 2022-07-13 15:26:41
// --------by Herio--------

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; 
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
const int hashmod[4] = {402653189,805306457,1610612741,998244353};
#define mst(a,b) memset(a,b,sizeof a)
#define db double
#define PII pair<int,int>
#define PLL pair<ll,ll>
#define x first
#define y second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define IOS ios::sync_with_stdio(false),cin.tie(nullptr) 
void Print(int *a,int n){
	for(int i=1;i<n;i++)
		printf("%d ",a[i]);
	printf("%d\n",a[n]); 
}
template <typename T>		//x=max(x,y)  x=min(x,y)
void cmx(T &x,T y){
	if(x<y) x=y;
}
template <typename T>
void cmn(T &x,T y){
	if(x>y) x=y;
}
const  double pi = acos(-1.0);
int main(){
	int x,y,d;cin>>x>>y>>d;
	 double r = sqrt(x*x+y*y);
	 double p = atan2(y,x);
	 //printf("%f---\n",atan2(0,0));
	p+=d*pi/180;
	printf("%.10f %.10f\n",r*cos(p),r*sin(p));
	return 0;
}

 类似资料: