旋转矩阵的算法

旋转矩阵是计算机图形学里面的基础内容。之前我还写过一篇计算机图形学基础知识的总结
操作的步骤可以分为两部,一是沿正对角线对称,二是沿水平对称轴对称

原图
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。

版权声明:本文为博主原创文章,转载请标明出处。

转载于:https://www.cnblogs.com/fridge/p/4861919.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值