日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nyoj298_点的变换_错误

發(fā)布時間:2025/5/22 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nyoj298_点的变换_错误 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

點的變換

時間限制:2000?ms ?|? 內(nèi)存限制:65535?KB 難度:5 描述

平面上有不超過10000個點,坐標都是已知的,現(xiàn)在可能對所有的點做以下幾種操作:

平移一定距離(M),相對X軸上下翻轉(zhuǎn)(X),相對Y軸左右翻轉(zhuǎn)(Y),坐標縮小或放大一定的倍數(shù)(S),所有點對坐標原點逆時針旋轉(zhuǎn)一定角度(R)。????

操作的次數(shù)不超過1000000次,求最終所有點的坐標。

?

提示:如果程序中用到PI的值,可以用acos(-1.0)獲得。

輸入
只有一組測試數(shù)據(jù)
測試數(shù)據(jù)的第一行是兩個整數(shù)N,M,分別表示點的個數(shù)與操作的個數(shù)(N<=10000,M<=1000000)
隨后的一行有N對數(shù)對,每個數(shù)對的第一個數(shù)表示一個點的x坐標,第二個數(shù)表示y坐標,這些點初始坐標大小絕對值不超過100。
隨后的M行,每行代表一種操作,行首是一個字符:
首字符如果是M,則表示平移操作,該行后面將跟兩個數(shù)x,y,表示把所有點按向量(x,y)平移;
首字符如果是X,則表示把所有點相對于X軸進行上下翻轉(zhuǎn);
首字符如果是Y,則表示把所有點相對于Y軸進行左右翻轉(zhuǎn);
首字符如果是S,則隨后將跟一個數(shù)P,表示坐標放大P倍;
首字符如果是R,則隨后將跟一個數(shù)A,表示所有點相對坐標原點逆時針旋轉(zhuǎn)一定的角度A(單位是度)
輸出
每行輸出兩個數(shù),表示一個點的坐標(對結(jié)果四舍五入到小數(shù)點后1位,輸出一位小數(shù)位)
點的輸出順序應與輸入順序保持一致
樣例輸入
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; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/TWS-YIFEI/p/5934113.html

總結(jié)

以上是生活随笔為你收集整理的nyoj298_点的变换_错误的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。