nyoj298_点的变换_错误
点的变换
- 描述
-
平面上有不超过10000个点,坐标都是已知的,现在可能对所有的点做以下几种操作:
平移一定距离(M),相对X轴上下翻转(X),相对Y轴左右翻转(Y),坐标缩小或放大一定的倍数(S),所有点对坐标原点逆时针旋转一定角度(R)。
操作的次数不超过1000000次,求最终所有点的坐标。
提示:如果程序中用到PI的值,可以用acos(-1.0)获得。
- 输入
-
只有一组测试数据
测试数据的第一行是两个整数N,M,分别表示点的个数与操作的个数(N<=10000,M<=1000000)
随后的一行有N对数对,每个数对的第一个数表示一个点的x坐标,第二个数表示y坐标,这些点初始坐标大小绝对值不超过100。
随后的M行,每行代表一种操作,行首是一个字符:
首字符如果是M,则表示平移操作,该行后面将跟两个数x,y,表示把所有点按向量(x,y)平移;
首字符如果是X,则表示把所有点相对于X轴进行上下翻转;
首字符如果是Y,则表示把所有点相对于Y轴进行左右翻转;
首字符如果是S,则随后将跟一个数P,表示坐标放大P倍;
首字符如果是R,则随后将跟一个数A,表示所有点相对坐标原点逆时针旋转一定的角度A(单位是度) - 输出
-
每行输出两个数,表示一个点的坐标(对结果四舍五入到小数点后1位,输出一位小数位)
点的输出顺序应与输入顺序保持一致 - 样例输入
-
2 5 1.0 2.0 2.0 3.0 X Y M 2.0 3.0 S 2.0 R 180
- 样例输出
-
-2.0 -2.0 0.0 0.0
#include <iostream> #include <cstdio> #include <cmath>#define PI acos(-1.0)using namespace std;struct Point{double m[3][1]; };struct matrix2{double m[3][3]; };Point point[10005];//点的坐标 matrix2 opera[5];//五种操作的对应矩阵 matrix2 ans;void init(matrix2 &t){for(int i=0;i<3;i++){for(int j=0;j<3;j++){t.m[i][j]=0;}}for(int i=0;i<3;i++){t.m[i][i]=1;} }matrix2 mult(matrix2 a,matrix2 b){//操作矩阵相乘 matrix2 t;for(int i=0;i<3;i++){for(int j=0;j<3;j++){t.m[i][j]=0;for(int k=0;k<3;k++){t.m[i][j]+=a.m[i][k]*b.m[k][j];}}}return t; }Point mult2(matrix2 a,Point b){Point t;for(int i=0;i<3;i++){for(int j=0;j<1;j++){t.m[i][j]=0;for(int k=0;k<3;k++){t.m[i][j]+=a.m[i][k]*b.m[k][j];}}}return t; }void moper(double p,double q){ans.m[0][2]+=p;ans.m[1][2]+=q; }void soper(double p){matrix2 tmp;init(tmp);tmp.m[0][0]=p;tmp.m[1][1]=p;ans=mult(ans,tmp); }void xoper(){matrix2 tmp;init(tmp);tmp.m[1][1]=-1;an ; }void yoper(){matrix2 tmp;init(tmp);tmp.m[0][0]=-1;ans=mult(ans,tmp); }void roper(float pp){matrix2 tmp;init(tmp);double tt=pp/180.0*PI;float aaa=cos(tt);tmp.m[0][0]=aaa;aaa=-sin(tt);tmp.m[0][1]=aaa;aaa=sin(tt);tmp.m[1][0]=aaa;aaa=cos(tt);tmp.m[1][1]=aaa;ans=mult(ans,tmp); }int main() {int N,M;double p=180;double t=p/180.0*PI;printf("%lf",sin(t));scanf("%d %d",&N,&M);for(int i=0;i<N;i++){scanf("%lf %lf",&point[i].m[0][0],&point[i].m[1][0]);}char o;double t1,t2;init(ans);for(int i=0;i<M;i++){getchar();scanf("%c",&o);if(o=='X'){xoper();continue;}if(o=='Y'){yoper();continue;}if(o=='M'){scanf("%lf %lf",&t1,&t2);moper(t1,t2);continue;}if(o=='S'){scanf("%lf",&t1);soper(t1);continue;}if(o=='R'){scanf("%lf",&t1);roper(t1);continue;}}for(int i=0;i<N;i++){Point tt;tt=mult2(ans,point[i]);printf("%.1lf %.1lf\n",tt.m[0][0],tt.m[1][0]);}return 0; }
转载于:https://www.cnblogs.com/TWS-YIFEI/p/5934113.html
nyoj298_点的变换_错误相关推荐
- python 霍夫直线变换_霍夫线变换
目录:一.引入极坐标 二.霍夫线变换实现原理 三.图像中的霍夫线变换 四.概率霍夫变换 五.Python 例子 六.参考 Hough线变换是一种用于检测直线的变换.它最大的优点是,即使是虚线(dash ...
- excel表格横向纵向变换_从Python到Excel
在Python的CommandLine中输入: [四大基本运算] a1=100 a2=3 print( a1+a2 ) print ( a1-a2) print ( a1 * a2) print ( ...
- 3704对象关闭时_错误号:3704 错误描述:对象关闭时,不允许操作
本文关键详细介绍了错误号:3704 错误描述:对象关掉时,不允许实际操作,必须的盆友能够参照下 "错误号:3704 错误描述:对象关掉时,不允许实际操作.sql=select top 10 ...
- 二维小波变换_很好的一篇小波变换的基础介绍
话说很早以前,我们接触的信号频域处理基本都是傅立叶和拉普拉斯的天下.但这些年,小波在信号分析中的逐渐兴盛和普及.这让人不得不感到好奇,是什么特性让它在图象压缩,信号处理这些关键应用中更得到信赖呢?说实 ...
- main方法_错误: 在类 ZiFUChuan.Pyramid 中找不到 main 方法, 请将 main 方法定义为:
错误: 在类 ZiFUChuan.Pyramid 中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 Java ...
- linux编译mysql报无法将左值_'错误:无法将'std::ostream {aka std::basic_ostream
我用这个模板读了类似的问题. 我没有模板,但我有同样的错误.这是我第一次重载< 我有三个文件.主文件,.h文件和.cpp文件. Team类使用了我实现的另一个类,但我不认为这个错误是由这个类引起 ...
- PHP常用功能块_错误和异常处理 — php(32)
一.错误和异常处理 1.1 错误类型和基本的调试方法 PHP程序的错误发生一般归属于下列三个领域: 语法错误: 语法错误最常见,并且也容易修复.如:代码中遗漏一个分号.这类错误会阻止脚本的执行. 运行 ...
- mysql不能写重复键_错误1022-无法写入;表中的重复键
关于create table命令上的重复键,我收到1022错误.看完查询后,我不知道在哪里进行复制.有人可以看到吗? SQL query: -- --------------------------- ...
- 如何求解单边z变换_的单边Z变换。.ppt
第8章 Z变换与离散时间系统的Z域分析 8.1 Z变换的定义 8.2 双边Z变换与单边Z变换的关系 8.3 Z变换的收敛域 8.4 常用序列的Z变换 8.5 Z变换的性质 8.6 Z反变换 8.7 Z ...
最新文章
- 国外10大IT网站和博客网站
- FPGA之道(27)VHDL的操作符号
- Savior:渗透测试报告自动生成工具
- 操作系统-银行家算法
- 构建之法阅读笔记(1)
- 广西2019全国计算机二级报名,广西2019年3月全国计算机二级考试报名入口已开通...
- 编程:从前有一个傻呆程序员,老婆交给他一项任务,他办了四次才满意
- as ssd中文版测试软件,AS SSD Benchmark
- Java程序员简历模板,内含个人专业技能和项目经验介绍
- Node2Vec实战
- 台式计算机装机,DIY台式电脑装机教程之新手装机图解!手把手教你组装电脑
- LaTex中插入超链接
- html 操作cookie,HtmlUnit 模拟浏览器以及Cookie使用示例
- 增长智能引领营销数字化,数字中台掌控消费者旅程
- Unveiling causal interactions in complex systems(揭示复杂系统中的因果交互作用)
- C#转Java心路历程
- 计算机主板的安装过程,电脑主板安装四大步骤全程讲解
- 《职来职往》里的经典语录,总有一句震惊到你!
- 人脸识别用哪种python库_python的face_recognition人脸识别库的使用
- java实现堆栈_Java实现一个简单的堆栈
热门文章
- Struts2学习笔记——Struts2与Spring整合
- 人民大学云计算编程的网上评估平台--解题报告 1004-1007
- SQL查询入门(下篇)
- 算法:删除排序数组中的重复项||
- 常考数据结构与算法:判断二叉树是否对称(迭代法,递归法)
- 前端一HTML:二十CSS的三种存在方式
- 汇编:CF(carry flag)标志位
- 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
- PHP 5.6.32 增加pdo_dblib.so拓展
- Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue