hdu 4998 矩陣表示旋轉

2021-06-26 09:31:00 字數 1273 閱讀 8821

乙個旋轉變換可以轉化為乙個三維矩陣的變化

繞(x,y)旋轉角度r,執行十次,求等價旋轉點和角度

繞原點矩陣如下

由於是繞(x,y),x1 = (x-x0)*cos0 - (y-y0)*sin0 + x0;y1同理,那麼第三行前兩列即為x0*(1-cos(r)) + y0*sin(r)和y0*(1-cos(r)) - x0*sin(r)

最後根據x0*(1-cos(r)) + y0*sin(r) = v[2][0]和

y0*(1-cos(r)) - x0*sin(r) = v[2][1]列出方程即可求解等價的x0,y0

#include #include #include #include #include #include #include #include #include using namespace std;

#define rd(x) scanf("%d",&x)

#define rd2(x,y) scanf("%d%d",&x,&y)

#define rd3(x,y,z) scanf("%d%d%d",&x,&y,&z)

#define clr0(x) memset(x,0,sizeof(x))

typedef long long ll;

double x,y,r;

const double pi = acos(-1.0);

struct matrix

void id()

void init()

matrix operator * (matrix c)

};int main()

double cosr = ans.v[0][0],sinr = ans.v[0][1];

r = atan2(sinr,cosr);

if(r < 0)

r += 2*pi;

double c1 = ans.v[2][0],c2 = ans.v[2][1];

double y = (c2*(cosr - 1) - sinr*c1)/(-sinr*sinr-(1-cosr)*(1-cosr)),

x = (c1*(1-cosr) - c2*sinr)/((1-cosr)*(1-cosr) + sinr*sinr);

printf("%.10lf %.10lf %.10lf\n", x, y, r);

} return 0;

}

hdu 4998 Rotate(計算幾何)

解題思路 題目大意 給定n個點和n個角度,平面內任意乙個點依次以這些點point i 為旋轉中心,逆時針旋轉 r i 度,求最後相當於繞哪個點旋轉多少度,求這個點的座標以及旋轉的角度。演算法思想 乙個點 x,y 繞另外乙個點 x0,y0 旋轉 r0 度的公式為 x1 x x0 cos r0 y y0...

hdu 1285 拓撲排序(鄰接表 鄰接矩陣)

題意 給n個比賽結果,輸出拓撲排名 yy 拓撲排序,初搞,最近練鄰接表,感覺比鄰接矩陣快的多 兩個都寫了一下,竟差兩倍之多,鄰接表神物啊 鄰接表 accepted 1285 15ms 248k 1030 b c kfinder include using namespace std int ind ...

矩陣構造 矩陣快速冪 HDU5950

題目 題意 給出公式f n f n 1 f n 2 2 n 4 給出n f 1 f 2 求f n 分析 快速冪 把公式分解一下,求一下矩陣,矩陣快速冪搞一下就好 題目的難點在於矩陣的構造題解 典型的矩陣快速冪的運用。關鍵是i 4怎麼維護?我們可以當成求第i 1項,那麼i 4就變成了 i 1 4。那麼...