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 ...
最新文章
- 免费Apk盈利之路:嵌入AdMob广告
- 使用Jenkins / Hudson远程API检查作业状态
- 面向对象进阶-反射(二)重要知识点
- Qt使用invokeMethod反射机制实现进程间的通信
- 解决方法:SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正
- 【工具篇】使用OpenCV播放视频并截取图片
- iOS面试--最新快手iOS面试题
- Win7系统怎么用笔记本做wifi热点?
- 火车票价还不够高(按照《经济学通识》手敲的(非原创))
- C++类和C结构体类型的异同
- mysql 1033_mysql报错1033 Incorrect information in file: ‘xxx.frm’问题的解决方法
- Windows 10离线安装dotnetfx35
- 告别windows、拥抱linux,ThinkPad E485安装XUbuntu实录
- unity如何使用电脑模拟VR环境
- MindMaster思维导图国内版更名“亿图脑图MindMaster”国产软件加速崛起!
- R语言里的非线性模型:多项式回归、局部样条、平滑样条、 广义相加模型GAM分析
- 作用域-函数包围代码
- ATI显卡配置aticonfig和amdcccle全解
- C primer plus 第四章课后编程练习答案笔记解释整理
- 【Python养成】常用内置函数 — 1(详解前8个内置函数)