旋转矩阵的算法
来源:互联网 发布:java 顺丰接口 编辑:程序博客网 时间:2024/06/09 21:39
旋转矩阵是计算机图形学里面的基础内容。之前我还写过一篇计算机图形学基础知识的总结
操作的步骤可以分为两部,一是沿正对角线对称,二是沿水平对称轴对称
原图:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
==》第一步之后:
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
==》第二步之后:
4 8 12 16
3 7 11 15
2 6 10 14
1 5 9 13
算法实现
void swap(int& a, int&b){ int temp = a; a = b; b = temp;}void rotate(int **a, int n){ //n*n的矩阵 //以主对角线为交换对称元素 for (int row = 0; row < n-1; row++) { for (int col = row+1; col < n; col++) { swap(a[row][col], a[col][row]); } } for (int col = 0; col < n; col++) { for (int row = 0; row < n/2; row++) { swap(a[row][col], a[n - 1-row][col]); } }}
实例测试
#include<stdio.h>#include<stdlib.h>#include<cstring>void rotate(int** a, int n);int main(){ int **a=(int**)malloc(sizeof(int*)*4); int num = 1; for (int i = 0; i < 4; i++) { a[i] = (int*)malloc(sizeof(int)* 4); for (int j = 0; j < 4; j++) a[i][j] = num++; } rotate(a, 4); for (int i = 0; i < 4; i++) { printf("\n"); for (int j = 0; j < 4; j++) printf("%d ", a[i][j]); } system("pause"); return 0;}
多余的话
有心人可以注意到一点,其实如果把函数rotate(int** a,int n)中的a类型修改为a[][4]的话会简单不少。这样在测试用例中传入a[4][4]即可,但是这样又限制了n。
0 0
- 矩阵旋转的算法
- 旋转矩阵的算法
- 关于矩阵旋转算法的实现
- 旋转矩阵算法
- 旋转矩阵算法
- 矩阵旋转算法
- 双色球旋转矩阵算法
- 图像旋转算法原理-- 旋转矩阵
- 图像旋转算法原理-- 旋转矩阵
- 图像旋转算法原理-- 旋转矩阵
- 三维旋转矩阵使用算法
- 三维旋转矩阵使用算法
- 三维旋转矩阵使用算法
- 旋转矩阵算法性能问题
- 旋转矩阵转化成四元数的三种算法
- java算法之简单的二维矩阵旋转Rotate Image
- 2559矩阵的旋转
- 矩阵的旋转
- 如何理解这个业务逻辑层
- mybatis源码分析
- 关于DUILIB的遮罩,控件穿透以及其应用的分析实践
- mongoVUE忽略大小写,java mongoDB忽略大小写
- oracle的pl/sql存储过程调用java soure来判断文件夹下某个文件是否存在
- 旋转矩阵的算法
- qt5 采集摄像头的视音频
- TMCache: fast object caching for iOS & OS X
- HBase的split分析
- Doing Homework again
- android 小米手机弹出框(自定义dialog)位置不居中解决方法
- 根据类名生成窗口
- 【exception】android编译ANT打包异常java.lang.OutOfMemoryError: GC overhead limit exceeded
- Struts 2的Tag的 style and layout的自定义(或是叫做修改吧)