Noting is more interesting than rotation!

Your little sister likes to rotate things. To put it easier to analyze, your sister makes n rotations. In the i-th time, she makes everything in the plane rotate counter-clockwisely around a point ai by a radian of pi.

Now she promises that the total effect of her rotations is a single rotation around a point A by radian P (this means the sum of pi is not a multiplier of 2π).

Of course, you should be able to figure out what is A and P :).

计算几何

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. using namespace std;
  7. const double eps=1e-;
  8. const double pi=acos(-1.0);
  9.  
  10. int sgn(double x){
  11. if(fabs(x)<eps) return ;
  12. if(x<) return -;
  13. else return ;
  14. }
  15.  
  16. struct Point{
  17. double x,y;
  18. Point(){}
  19. Point(double _x,double _y){
  20. x=_x;
  21. y=_y;
  22. }
  23. Point operator -(const Point &b)const{
  24. return Point(x-b.x,y-b.y);
  25. }
  26. double operator ^(const Point &b)const{
  27. return x*b.y-y*b.x;
  28. }
  29. double operator *(const Point &b)const{
  30. return x*b.x+y*b.y;
  31. }
  32. Point operator +(const Point &b)const{
  33. return Point(x+b.x,y+b.y);
  34. }
  35. Point operator *(const double &k)const{
  36. return Point(x*k,y*k);
  37. }
  38. Point operator /(const double &k)const{
  39. return Point(x/k,y/k);
  40. }
  41. Point rotate(Point p,double angle){
  42. Point v=(*this)-p;
  43. double c=cos(angle),s=sin(angle);
  44. return Point(p.x+v.x*c-v.y*s,p.y+v.x*s+v.y*c);
  45. }
  46. double len2(){
  47. return x*x+y*y;
  48. }
  49. };
  50.  
  51. struct Line{
  52. Point s,e;
  53. Line(){}
  54. Line(Point _s,Point _e){
  55. s=_s;
  56. e=_e;
  57. }
  58. Point crosspoint(Line v){
  59. double a1=(v.e-v.s)^(s-v.s);
  60. double a2=(v.e-v.s)^(e-v.s);
  61. return Point((s.x*a2-e.x*a1)/(a2-a1),(s.y*a2-e.y*a1)/(a2-a1));
  62. }
  63. Point lineprog(Point p){
  64. return s+( ((e-s)*((e-s)*(p-s)))/((e-s).len2()) );
  65. }
  66. };
  67.  
  68. void solve(){
  69. int n,i;
  70. double x,y,p,nx,ny,np;
  71. Point a,b,c,d,e,f,g;
  72. Line l1,l2,l3,l4;
  73. scanf("%d",&n);
  74. scanf("%lf%lf%lf",&nx,&ny,&np);
  75. for(i=;i<=n;i++){
  76. scanf("%lf%lf%lf",&x,&y,&p);
  77. a=Point(nx,ny);b=Point(x,y);
  78. d=a.rotate(b,p);c=b.rotate(a,-np);
  79. l1=Line(c,b);l2=Line(a,d);
  80. e=l1.lineprog(a);f=l2.lineprog(b);
  81. l3=Line(a,e);l4=Line(b,f);
  82. g=l3.crosspoint(l4);
  83. nx=g.x;ny=g.y;
  84. np=np+p;
  85. if(np>*pi) np-=*pi;
  86. }
  87. printf("%lf %lf %lf\n",nx,ny,np);
  88. }
  89.  
  90. int main(){
  91. int t;
  92. scanf("%d",&t);
  93. while(t)solve();
  94. return ;
  95. }

hdu4998 Rotate 计算几何的更多相关文章

  1. HDU 4998 Rotate (计算几何)

    HDU 4998 Rotate (计算几何) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4998 Description Noting is more ...

  2. hdu4998 Rotate【计算几何】

    Noting is more interesting than rotation!  Your little sister likes to rotate things. To put it easi ...

  3. 【几何模板加点小思路】hdu-4998 Rotate

    用几何模板敲的,也有直接公式推的,追求短代码的可以点右上角小红了...... 题意就是想想一个物体分别做绕某一点(给出坐标)旋转p度(给出角度)后,其位置等价于绕哪一点旋转多少度,输出该等价点及其等价 ...

  4. sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)

    Rescue The Princess Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 Several days ago, a b ...

  5. HDU 4063 Aircraft(计算几何)(The 36th ACM/ICPC Asia Regional Fuzhou Site —— Online Contest)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4063 Description You are playing a flying game. In th ...

  6. Rotate

    hdu4998:http://acm.hdu.edu.cn/showproblem.php?pid=4998 题意:给你n个点,以及绕每个点旋转的弧度.然后,问你经过这n次旋转,平面中的点总的效果是相 ...

  7. UVA12304 2D Geometry 110 in 1! 计算几何

    计算几何: 堆几何模版就能够了. . .. Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in bi ...

  8. 计算几何总结(Part 1~2)

    Preface 对于一个初三连三角函数都不会的蒟蒻来说计算几何简直就是噩梦. 反正都是要学的也TM没办法,那就慢慢一点点学起吧. 计算几何要有正确的板子,不然那种几百行CODE的题写死你. 本蒟蒻的学 ...

  9. UVA 12304 - 2D Geometry 110 in 1! - [平面几何基础题大集合][计算几何模板]

    题目链接:https://cn.vjudge.net/problem/UVA-12304 题意: 作为题目大合集,有以下一些要求: ①给出三角形三个点,求三角形外接圆,求外接圆的圆心和半径. ②给出三 ...

随机推荐

  1. c语言亲缘线程通过管道通信一些疑问

    亲缘线程在使用管道时,发现第一次使用管道进行进行通信完全正常(./a.out 1),但当重新运行并使用新管道文件时候出现数据无法读取的问题(./a.out 2)(./a.out 3),甚至出现子线程部 ...

  2. python介绍与入门

    一.python 的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...

  3. day29-python阶段性复习三

    七.python打开文件方式 open r: 读的方式 w:已写的方式打开 a:以追加的方式 r+ 读写模式 w+ 读写 a+ 读写 rb:二进制读模式打开 wb:以二进制写模式打开 ab 二进制追加 ...

  4. It is never too late!

    整理着过去的学习笔记,零零碎碎的,偶尔夹杂着当时的心境. 泛泛的学着东西,不很系统,不很深入,倒像是在拾海,有时捡捡贝壳,有时抓抓螃蟹.叹服大海的神奇,还没来得及深钻某个领域. (以下内容写于2016 ...

  5. centos7 新装系统网络配置

    [root@localhost ~]# cat /etc/sysconfig/grub GRUB_TIMEOUT= GRUB_DISTRIBUTOR="$(sed 's, release . ...

  6. GFS中文翻译

    Google文件系统 GFS是一个可扩展的分布式文件系统,用于大型的.分布式的.对大量数据进行访问的应用.它运行于廉价的普通硬件上,但可以提供容错功能.它可以给大量的用户提供总体性能较高的服务. 1. ...

  7. 学react的第一天

    属性 class = className for = htmlFrom jsx语法被编译了,所以可以在return里写html标签 react的属性 constructor(props){ super ...

  8. L1-056 猜数字

    一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢.本题就要求你找出其中的赢家. 输入格式: 输入在第一行给出一个正整数N(≤10​4​​).随后 N 行,每行给出一个玩 ...

  9. JavaScript+CSS+DIV实现下拉菜单示例

    <!DOCTYPE html> <html> <head> <title>下拉菜单示例</title> <script languag ...

  10. 设置table中的td一连串内容自动换行

    遇到一长串字母撑出了td宽度,导致整个表格错乱,如图: , 解决办法: 第一: table 加上css: table-layout: fixed;(此css属性 表示 列宽由表格宽度和列宽度设定.不会 ...