hdu4998 Rotate(计算几何+模拟)
来源:互联网 发布:ipsec dh算法 编辑:程序博客网 时间:2024/06/08 16:08
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4998
题目大意:
n次旋转,每一次以(x,y)为中心点旋转弧度p。问最终旋转的效果相当于是围绕哪个点旋转弧度P?
输出这个点坐标以及旋转的弧度P
解:
这题就是模拟做的,因为数据量不大。模拟做就是写起来麻烦。
因为用的旋转模板是逆时针旋转,但最后求的P是在三角形里求解出来的,这样的P一定小于π,如果旋转角大于π需要判定下。
(和队友各种整才整过,菜~~)
代码:
#include <bits/stdc++.h>const double pi = acos (-1.0);const double eps=1e-6;using namespace std;struct Point{ double x,y,b; Point(){} Point(double _x,double _y) { x=_x;y=_y; } Point operator -(const Point &b)const { return Point(x-b.x,y-b.y); } double operator ^(const Point &b)const { return x*b.y-y*b.x; } void trans(double B) { double tx=x,ty=y; x=tx*cos(B)-ty*sin(B); y=tx*sin(B)+ty*cos(B); }}a[15];void zhuan(Point &A,Point &B,double b){ A.x-=B.x; A.y-=B.y; A.trans(b); A.x+=B.x; A.y+=B.y;}Point AA(101,100),BB(101,1),CC(0,101);struct Line{ Point s,e; Line(){} Line(Point _s,Point _e) { s=_s;e=_e; } pair<int,Point> operator &(const Line &b)const{ Point res=s; double t=((s-b.s)^(b.s-b.e))/((s-e)^(b.s-b.e)); res.x+=(e.x-s.x)*t; res.y+=(e.y-s.y)*t; return make_pair(2,res); }};double dist(Point A,Point B){ return sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));}double qiuhudu(Point C,Point ans1,Point CC){ double a=dist(C,ans1); double b=dist(CC,ans1); double c=dist(C,CC); double ans=(a*a+b*b-c*c)/2/a/b; return acos(ans);}int main(){ int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); Point A(101,100),B(101,1),C(0,101); for(int i=0;i<n;i++) { scanf("%lf%lf%lf",&a[i].x,&a[i].y,&a[i].b); zhuan(A,a[i],a[i].b); zhuan(B,a[i],a[i].b); zhuan(C,a[i],a[i].b); } Point mid1((A.x+AA.x)/2,(A.y+AA.y)/2); Point mid2((B.x+BB.x)/2,(B.y+BB.y)/2); zhuan(A,mid1,pi/2); Line A1(A,mid1); zhuan(B,mid2,pi/2); Line A2(B,mid2); pair<int,Point>s=A1&A2; Point ans1(s.second.x,s.second.y); double ans2=qiuhudu(C,ans1,CC);//cout<<"qiude ="<<ans2<<" "; //cout<<ans2<<endl; Point temp(CC.x,CC.y); zhuan(temp,ans1,ans2); if(fabs(temp.x-C.x)>eps||fabs(temp.y-C.y)>eps) ans2=2*pi-ans2; /*cout<<"CC"<<CC.x<<" "<<CC.y<<endl; cout<<"C"<<C.x<<" "<<C.y<<endl; cout<<"temp"<<temp.x<<" "<<temp.y<<endl;*/ printf("%.10f %.10f %.10f\n",s.second.x,s.second.y,ans2); } return 0;}
阅读全文
0 0
- hdu4998 Rotate(计算几何+模拟)
- Rotate (hdu4998) 几何
- hdu4998(几何----平面 旋转)
- HDU4998 Rotate(旋转,线段相交模板)
- hdu 4998 Rotate(计算几何)
- 【计算几何】 HDOJ 4998 Rotate
- HDU 4998 Rotate 计算几何
- HDU 4998 Rotate(计算几何 绕点旋转)
- HDU 4998 Rotate(计算几何 绕点旋转)
- hdu4998
- HDU 4998 Rotate(计算几何)2014年鞍山赛区网络赛
- HDU 5017 Ellipsoid (计算几何,模拟退火)
- 【NOIP 模拟题】独眼兔(计算几何)
- 【NOI2017模拟3.30】原谅(计算几何,期望)
- hdu 6127 计算几何模拟题(旋转扫描线)
- HDU4998 Rotate (2014 ACM/ICPC Asia Regional Anshan Online)
- hdu 4998 Rotate 计算几何 点的旋转
- HDU 3644 计算几何 模拟退火
- 绪论(未完待续)
- python 3.6.2 使用VScode 安装requests包
- 自主编程实现二分法查找
- Percolation(渗透)问题
- poj2796 Feel Good(单调栈)
- hdu4998 Rotate(计算几何+模拟)
- Android图片压缩利器——Luban(鲁班),智商二百五……
- Java计算矩形的面积和周长
- 字典
- python之单例模式
- UnityShader从入门到放弃(一)UnityShader的结构
- React Native带你实现scrollable-tab-view(四)
- 《笨办法学python》加分习题36——我的答案
- 数据结构与算法:STL容器