简单点说,我有一个NN的二维矩阵,假如是2828的矩阵,我想让这个矩阵以矩阵的中心点(X=14,Y=14)为中心旋转任意角度,请问C语言的话,要怎么做呢~
3条回答 默认 最新
- _GX_ 2022-02-07 20:36关注
假设旋转角度为
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。
如果想保留所有的旋转后的元素,那么旋转后的矩阵大小可以根据原矩阵四个角点的坐标经过上面旋转计算得到的坐标值的差值得出。还要再做一次坐标映射,根据中心点不动,矩阵原点(左上角)从原矩阵挪到新矩阵。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 (标签-STM32|关键词-智能小车)
- ¥20 关于#stm32#的问题,请各位专家解答!
- ¥15 (标签-python)
- ¥15 第一个已完成,求第二个做法
- ¥20 搭建awx,试了很多版本都有错
- ¥15 java corba的客户端该如何指定使用本地某个固定IP去连接服务端?
- ¥15 activiti工作流问题,求解答
- ¥15 有人写过RPA后台管理系统么?
- ¥15 Bioage计算生物学年龄
- ¥20 如何将FPGA Alveo U50恢复原来出厂设置哇?