简单点说,我有一个NN的二维矩阵,假如是2828的矩阵,我想让这个矩阵以矩阵的中心点(X=14,Y=14)为中心旋转任意角度,请问C语言的话,要怎么做呢~
简单点说,我有一个NN的二维矩阵,假如是2828的矩阵,我想让这个矩阵以矩阵的中心点(X=14,Y=14)为中心旋转任意角度,请问C语言的话,要怎么做呢~
收起
假设旋转角度为theta
,theta
的取值范围为-180<=theta<=180
,当theta>0
时表示逆时针选择,当theta<0
时表示顺时针旋转,那么旋转矩阵R
为
对于一个NxN
阶矩阵,其中心点C
坐标为(N/2, N/2)
,假设任意元素的坐标P1
为(x1,y1)
,旋转旋转后的坐标P2
为(x2,y2)
,那么P2 = R(P1-C)+C
。
计算出旋转后的坐标值后,可以把坐标值向最接近的整数取整(即四舍五入)
旋转后矩阵大小的问题:
如果旋转后矩阵任然保持和原来矩阵一样大小,那么可以舍弃那些旋转后坐标值在[0,N)之外的元素,根据坐标映射拷贝矩阵元素到新矩阵中,而没有被映射到的元素应该事先初始化为一个给定值,比如0。
如果想保留所有的旋转后的元素,那么旋转后的矩阵大小可以根据原矩阵四个角点的坐标经过上面旋转计算得到的坐标值的差值得出。还要再做一次坐标映射,根据中心点不动,矩阵原点(左上角)从原矩阵挪到新矩阵。
报告相同问题?