[TIOJ] 1559. Mikey的數學作業
題目連結:http://tioj.infor.org/problems/1559
數學不好,想了一下下。我的作法是求出給定兩個點的距離跟夾角,之後以其中一個點為暫時原點,然後用極座標轉回普通座標方式的作法找到60度的點,再平移回剛剛的暫時原點即可。
數學不好,想了一下下。我的作法是求出給定兩個點的距離跟夾角,之後以其中一個點為暫時原點,然後用極座標轉回普通座標方式的作法找到60度的點,再平移回剛剛的暫時原點即可。
#include <bits/stdc++.h>
using namespace std;
typedef pair<double,double> PDD;
#define X first
#define Y second
#define deg2rad(x) (acos(-1)*x/180.)
int main(){
PDD a,b, ans1, ans2;
while(cin>>a.X>>a.Y>>b.X>>b.Y){
double dis = sqrt((a.X-b.X)*(a.X-b.X)+(a.Y-b.Y)*(a.Y-b.Y));
double theta = atan2((b.Y-a.Y), (b.X-a.X));
ans1 = {a.X+dis*cos(deg2rad(60)+theta), a.Y+dis*sin(deg2rad(60)+theta)};
ans2 = {a.X+dis*cos(deg2rad(300)+theta), a.Y+dis*sin(deg2rad(300)+theta)};
if(ans2<ans1) swap(ans1,ans2);
cout<<setprecision(3)<<fixed<<ans1.X<<' '<<ans1.Y<<' '<<ans2.X<<' '<<ans2.Y<<'\n';
}
return 0;
}
留言
張貼留言