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[][];
}; struct matrix2{
double m[][];
}; Point point[];//点的坐标
matrix2 opera[];//五种操作的对应矩阵
matrix2 ans; void init(matrix2 &t){
for(int i=;i<;i++){
for(int j=;j<;j++){
t.m[i][j]=;
}
}
for(int i=;i<;i++){
t.m[i][i]=;
}
} matrix2 mult(matrix2 a,matrix2 b){//操作矩阵相乘
matrix2 t;
for(int i=;i<;i++){
for(int j=;j<;j++){
t.m[i][j]=;
for(int k=;k<;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=;i<;i++){
for(int j=;j<;j++){
t.m[i][j]=;
for(int k=;k<;k++){
t.m[i][j]+=a.m[i][k]*b.m[k][j];
}
}
}
return t;
} void moper(double p,double q){
ans.m[][]+=p;
ans.m[][]+=q;
} void soper(double p){
matrix2 tmp;
init(tmp);
tmp.m[][]=p;
tmp.m[][]=p;
ans=mult(ans,tmp);
} void xoper(){
matrix2 tmp;
init(tmp);
tmp.m[][]=-;
an ;
} void yoper(){
matrix2 tmp;
init(tmp);
tmp.m[][]=-;
ans=mult(ans,tmp);
} void roper(float pp){
matrix2 tmp;
init(tmp);
double tt=pp/180.0*PI; float aaa=cos(tt);
tmp.m[][]=aaa; aaa=-sin(tt);
tmp.m[][]=aaa; aaa=sin(tt);
tmp.m[][]=aaa; aaa=cos(tt);
tmp.m[][]=aaa; ans=mult(ans,tmp);
} int main()
{
int N,M; double p=;
double t=p/180.0*PI;
printf("%lf",sin(t)); scanf("%d %d",&N,&M);
for(int i=;i<N;i++){
scanf("%lf %lf",&point[i].m[][],&point[i].m[][]);
}
char o;
double t1,t2;
init(ans);
for(int i=;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=;i<N;i++){
Point tt;
tt=mult2(ans,point[i]);
printf("%.1lf %.1lf\n",tt.m[][],tt.m[][]);
}
return ;
}
nyoj298_点的变换_错误的更多相关文章
- BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组
BZOJ_1692_[Usaco2007 Dec]队列变换_后缀数组 Description FJ打算带他的N(1 <= N <= 30,000)头奶牛去参加一年一度的“全美农场主大奖赛” ...
- python开发环境_windows系统安装_错误记录
1 安装python编译器2.7.11版本 (安装包自带pip,setuptools,依赖,会将pip,setuptools安装到自己的类库中) 配置环境变量: 配置python_home,然后加入p ...
- CSS3_过渡_2D 变换_瓶体旋转_动态时钟
1. 过渡 transition 允许 CSS 的属性值在一定时间内平滑的过渡, 在鼠标点击,鼠标滑过或对属性改变中触发,并圆滑的改变 CSS 的属性值 简写属性: #box { width: 300 ...
- Go指南练习_错误
源地址 https://tour.go-zh.org/methods/20 一.题目描述 从之前的练习中复制 Sqrt 函数,修改它使其返回 error 值. Sqrt 接受到一个负数时,应当返回一个 ...
- PREV-5_蓝桥杯_错误票据
问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成 ...
- PHP常用功能块_错误和异常处理 — php(32)
一.错误和异常处理 1.1 错误类型和基本的调试方法PHP程序的错误发生一般归属于下列三个领域: 语法错误:语法错误最常见,并且也容易修复.如:代码中遗漏一个分号.这类错误会阻止脚本的执行. 运行时错 ...
- VC++_错误 无法打开包括文件“glglut.h” No such file or directory 怎么办
在网上看到类似的问题,查找资料找到了解决方案,现整理如下,有些更改,好让自己多些印象,附原文网址:http://blog.csdn.net/bigloomy/article/details/62265 ...
- [bzoj1692][Usaco2007 Dec]队列变换_后缀数组_贪心
队列变换 bzoj-1692 Usaco-2007 Dec 题目大意:给定一个长度为$n$的字符串.每次从头或尾取出一个字符加到另一个字符串里.要求变换后生成的字符串字典序最小,求字典序最小的字符串. ...
- idea初见问题整理_错误: -source 1.5 中不支持 diamond 运算符
最近在移动工程到idea下,顺便改目录结构,遇到的问题不一定全部记录,有些答案摘抄自别人博客,已注明来源,由于不是摘抄自同一作者,且有自己的一些内容,所以标注为原创. 1.(错误: -source 1 ...
随机推荐
- c# List AddRange
https://msdn.microsoft.com/zh-cn/library/z883w3dc(v=vs.80).aspx List 中会保留集合中元素的顺序. 如果新的 Count(当前 Cou ...
- js 判断鼠标滚轮方向
最近因为公司项目的要求,需要做页面的全屏滚动切换效果. 页面的切换,需要脚本监听鼠标滑轮的滚动事件,来判断页面是向上切换or向下切换. 这里的脚本很简单,我就直接贴出来吧. $('html').on( ...
- 2015年12月03日 GitHub入门学习(五)Markdown语法简介
Markdown一种标记语言,语法简洁,不像Word或Pages有大量排版.字体设置.常用的标记符号不超过十个.被大量写作爱好者.撰稿人.作家所青睐. 一.Markdown的优点 专注你的文字内容而不 ...
- java框架
Dash Reports 1.0发布 Java报表解决方案 http://developer.51cto.com/art/201205/337189.htm http://www.oschina.ne ...
- HDOJ 2444 The Accomodation of Students
染色判读二分图+Hungary匹配 The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limi ...
- hdu.1429.胜利大逃亡(续)(bfs + 0101011110)
胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 将json返回的日期格式转换
<script> function ChangeDateFormat(cellval) { var date = new Date(parseInt ...
- linux 驱动 工作队列
http://blog.sina.com.cn/s/blog_78d30f6b0102uyaf.html http://blog.csdn.net/lyc_stronger/article/detai ...
- mysql python image
连接mysql数据库: cnx = mysql.connector.connect(user='joe', database='test') Connector/Python参数列表 Argument ...
- HDU 5038 Grade北京赛区网赛1005
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5038 解题报告:就是输入n个数w,定义s = 10000 - (100 - w)^2,问s出现频率最高 ...