日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

nyoj298_点的变换_错误

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

點(diǎn)的變換

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

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

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

操作的次數(shù)不超過1000000次,求最終所有點(diǎn)的坐標(biāo)。

?

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

輸入
只有一組測(cè)試數(shù)據(jù)
測(cè)試數(shù)據(jù)的第一行是兩個(gè)整數(shù)N,M,分別表示點(diǎn)的個(gè)數(shù)與操作的個(gè)數(shù)(N<=10000,M<=1000000)
隨后的一行有N對(duì)數(shù)對(duì),每個(gè)數(shù)對(duì)的第一個(gè)數(shù)表示一個(gè)點(diǎn)的x坐標(biāo),第二個(gè)數(shù)表示y坐標(biāo),這些點(diǎn)初始坐標(biāo)大小絕對(duì)值不超過100。
隨后的M行,每行代表一種操作,行首是一個(gè)字符:
首字符如果是M,則表示平移操作,該行后面將跟兩個(gè)數(shù)x,y,表示把所有點(diǎn)按向量(x,y)平移;
首字符如果是X,則表示把所有點(diǎn)相對(duì)于X軸進(jìn)行上下翻轉(zhuǎn);
首字符如果是Y,則表示把所有點(diǎn)相對(duì)于Y軸進(jìn)行左右翻轉(zhuǎn);
首字符如果是S,則隨后將跟一個(gè)數(shù)P,表示坐標(biāo)放大P倍;
首字符如果是R,則隨后將跟一個(gè)數(shù)A,表示所有點(diǎn)相對(duì)坐標(biāo)原點(diǎn)逆時(shí)針旋轉(zhuǎn)一定的角度A(單位是度)
輸出
每行輸出兩個(gè)數(shù),表示一個(gè)點(diǎn)的坐標(biāo)(對(duì)結(jié)果四舍五入到小數(shù)點(diǎn)后1位,輸出一位小數(shù)位)
點(diǎn)的輸出順序應(yīng)與輸入順序保持一致
樣例輸入
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];//點(diǎn)的坐標(biāo) matrix2 opera[5];//五種操作的對(duì)應(yīng)矩陣 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_点的变换_错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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