hdu4998 Rotate 计算几何
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 :).
计算几何
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- using namespace std;
- const double eps=1e-;
- const double pi=acos(-1.0);
- int sgn(double x){
- if(fabs(x)<eps) return ;
- if(x<) return -;
- else return ;
- }
- struct Point{
- double x,y;
- 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;
- }
- double operator *(const Point &b)const{
- return x*b.x+y*b.y;
- }
- Point operator +(const Point &b)const{
- return Point(x+b.x,y+b.y);
- }
- Point operator *(const double &k)const{
- return Point(x*k,y*k);
- }
- Point operator /(const double &k)const{
- return Point(x/k,y/k);
- }
- Point rotate(Point p,double angle){
- Point v=(*this)-p;
- double c=cos(angle),s=sin(angle);
- return Point(p.x+v.x*c-v.y*s,p.y+v.x*s+v.y*c);
- }
- double len2(){
- return x*x+y*y;
- }
- };
- struct Line{
- Point s,e;
- Line(){}
- Line(Point _s,Point _e){
- s=_s;
- e=_e;
- }
- Point crosspoint(Line v){
- double a1=(v.e-v.s)^(s-v.s);
- double a2=(v.e-v.s)^(e-v.s);
- return Point((s.x*a2-e.x*a1)/(a2-a1),(s.y*a2-e.y*a1)/(a2-a1));
- }
- Point lineprog(Point p){
- return s+( ((e-s)*((e-s)*(p-s)))/((e-s).len2()) );
- }
- };
- void solve(){
- int n,i;
- double x,y,p,nx,ny,np;
- Point a,b,c,d,e,f,g;
- Line l1,l2,l3,l4;
- scanf("%d",&n);
- scanf("%lf%lf%lf",&nx,&ny,&np);
- for(i=;i<=n;i++){
- scanf("%lf%lf%lf",&x,&y,&p);
- a=Point(nx,ny);b=Point(x,y);
- d=a.rotate(b,p);c=b.rotate(a,-np);
- l1=Line(c,b);l2=Line(a,d);
- e=l1.lineprog(a);f=l2.lineprog(b);
- l3=Line(a,e);l4=Line(b,f);
- g=l3.crosspoint(l4);
- nx=g.x;ny=g.y;
- np=np+p;
- if(np>*pi) np-=*pi;
- }
- printf("%lf %lf %lf\n",nx,ny,np);
- }
- int main(){
- int t;
- scanf("%d",&t);
- while(t)solve();
- return ;
- }
hdu4998 Rotate 计算几何的更多相关文章
- HDU 4998 Rotate (计算几何)
HDU 4998 Rotate (计算几何) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4998 Description Noting is more ...
- hdu4998 Rotate【计算几何】
Noting is more interesting than rotation! Your little sister likes to rotate things. To put it easi ...
- 【几何模板加点小思路】hdu-4998 Rotate
用几何模板敲的,也有直接公式推的,追求短代码的可以点右上角小红了...... 题意就是想想一个物体分别做绕某一点(给出坐标)旋转p度(给出角度)后,其位置等价于绕哪一点旋转多少度,输出该等价点及其等价 ...
- sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)
Rescue The Princess Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Several days ago, a b ...
- 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 ...
- Rotate
hdu4998:http://acm.hdu.edu.cn/showproblem.php?pid=4998 题意:给你n个点,以及绕每个点旋转的弧度.然后,问你经过这n次旋转,平面中的点总的效果是相 ...
- UVA12304 2D Geometry 110 in 1! 计算几何
计算几何: 堆几何模版就能够了. . .. Description Problem E 2D Geometry 110 in 1! This is a collection of 110 (in bi ...
- 计算几何总结(Part 1~2)
Preface 对于一个初三连三角函数都不会的蒟蒻来说计算几何简直就是噩梦. 反正都是要学的也TM没办法,那就慢慢一点点学起吧. 计算几何要有正确的板子,不然那种几百行CODE的题写死你. 本蒟蒻的学 ...
- UVA 12304 - 2D Geometry 110 in 1! - [平面几何基础题大集合][计算几何模板]
题目链接:https://cn.vjudge.net/problem/UVA-12304 题意: 作为题目大合集,有以下一些要求: ①给出三角形三个点,求三角形外接圆,求外接圆的圆心和半径. ②给出三 ...
随机推荐
- c语言亲缘线程通过管道通信一些疑问
亲缘线程在使用管道时,发现第一次使用管道进行进行通信完全正常(./a.out 1),但当重新运行并使用新管道文件时候出现数据无法读取的问题(./a.out 2)(./a.out 3),甚至出现子线程部 ...
- python介绍与入门
一.python 的介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ...
- day29-python阶段性复习三
七.python打开文件方式 open r: 读的方式 w:已写的方式打开 a:以追加的方式 r+ 读写模式 w+ 读写 a+ 读写 rb:二进制读模式打开 wb:以二进制写模式打开 ab 二进制追加 ...
- It is never too late!
整理着过去的学习笔记,零零碎碎的,偶尔夹杂着当时的心境. 泛泛的学着东西,不很系统,不很深入,倒像是在拾海,有时捡捡贝壳,有时抓抓螃蟹.叹服大海的神奇,还没来得及深钻某个领域. (以下内容写于2016 ...
- centos7 新装系统网络配置
[root@localhost ~]# cat /etc/sysconfig/grub GRUB_TIMEOUT= GRUB_DISTRIBUTOR="$(sed 's, release . ...
- GFS中文翻译
Google文件系统 GFS是一个可扩展的分布式文件系统,用于大型的.分布式的.对大量数据进行访问的应用.它运行于廉价的普通硬件上,但可以提供容错功能.它可以给大量的用户提供总体性能较高的服务. 1. ...
- 学react的第一天
属性 class = className for = htmlFrom jsx语法被编译了,所以可以在return里写html标签 react的属性 constructor(props){ super ...
- L1-056 猜数字
一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢.本题就要求你找出其中的赢家. 输入格式: 输入在第一行给出一个正整数N(≤104).随后 N 行,每行给出一个玩 ...
- JavaScript+CSS+DIV实现下拉菜单示例
<!DOCTYPE html> <html> <head> <title>下拉菜单示例</title> <script languag ...
- 设置table中的td一连串内容自动换行
遇到一长串字母撑出了td宽度,导致整个表格错乱,如图: , 解决办法: 第一: table 加上css: table-layout: fixed;(此css属性 表示 列宽由表格宽度和列宽度设定.不会 ...