乙個旋轉變換可以轉化為乙個三維矩陣的變化
繞(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。那麼...