美文网首页
二维数组旋转90度、180度、270度

二维数组旋转90度、180度、270度

作者: 人气小哥 | 来源:发表于2018-06-19 12:24 被阅读0次

图像处理中,很多时候要使用到二维数组的旋转。本质上二维数组的旋转其实就是坐标的变换,即旋转后的坐标(x,y)需要对应到原有二维数组的坐标点上,取到正确的值即可完成正确的旋转。

  规则很好找。见如下的代码中的3个转换公式即可。
void Rotate90()
{
    int b[2][3] = {{1,2,3},{4,5,6}};
    int a[3][2] = {0};

    for(int i=0;i<3;i++)
    {
        for(int j=0;j<2;j++)
        {
            //a[i][j] = b[h-1-j][i]; here h = 2
            a[i][j] = b[2-1-j][i];
        }
    }

    //使用一维数组模拟二维数组
    int w = 3;
    int h = 2;
    int *p = (int *)new int[w*h];
    int *p2 = (int *)new int[w*h];
    for(int i=0;i<w*h;i++)
    {
        p[i] = i+1;
    }
    int newH = w;
    int newW = h;
    for(int i=0;i<newH;i++)
    {
        for(int j=0;j<newW;j++)
        {
            //a[i][j] = b[h-1-j][i]
            p2[i*newW+j] = p[(h-1-j)*w+i];
        }
    }

    delete []p;
    delete []p2;
}

void Rotate180()
{
    int b[2][3] = {{1,2,3},{4,5,6}};
    int a[2][3] = {0};

    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
        {
            //a[i][j] = b[h-1-i][w-1-j]; here h = 2
            a[i][j] = b[2-1-i][3-1-j];
        }
    }

    //使用一维数组模拟二维数组
    int w = 3;
    int h = 2;
    int *p = (int *)new int[w*h];
    int *p2 = (int *)new int[w*h];
    for(int i=0;i<w*h;i++)
    {
        p[i] = i+1;
    }
    int newH = h;
    int newW = w;
    for(int i=0;i<newH;i++)
    {
        for(int j=0;j<newW;j++)
        {
            //a[i][j] = b[h-1-i][w-1-j];
            p2[i*newW+j] = p[(h-1-i)*w+w-1-j];
        }
    }

    delete []p;
    delete []p2;
}

void Rotate270()
{
    int b[2][3] = {{1,2,3},{4,5,6}};
    int a[3][2] = {0};

    for(int i=0;i<3;i++)
    {
        for(int j=0;j<2;j++)
        {
            //a[i][j] = b[j][w-1-i]; here w = 3
            a[i][j] = b[j][3-1-i];
        }
    }

    //使用一维数组模拟二维数组
    int w = 3;
    int h = 2;
    int *p = (int *)new int[w*h];
    int *p2 = (int *)new int[w*h];
    for(int i=0;i<w*h;i++)
    {
        p[i] = i+1;
    }
    int newH = w;
    int newW = h;
    for(int i=0;i<newH;i++)
    {
        for(int j=0;j<newW;j++)
        {
            //a[i][j] = b[j][w-1-i];
            p2[i*newW+j] = p[j*w+w-1-i];
        }
    }

    delete []p;
    delete []p2;
}

原文:https://blog.csdn.net/faithzzf/article/details/77009777

相关文章

  • 二维数组旋转90度、180度、270度

    图像处理中,很多时候要使用到二维数组的旋转。本质上二维数组的旋转其实就是坐标的变换,即旋转后的坐标(x,y)需要对...

  • 48、Rotate Image

    90°旋转二维数组 使用第一种解法

  • 矩形数组的各种翻转旋转

    矩形数组水平翻转、垂直翻转、对角线翻转、逆时针旋转、顺时针旋转。 1、翻转 1.1、水平翻转 使二维数组进行水平翻...

  • 剑指offer——JAVA版

    Array 数组题目汇总[18题] [剑指offer] 二维数组中的查找 [剑指offer] 旋转数组的最小数字 ...

  • 旋转打印二维数组

  • 矩阵(二维数组)旋转

    向左或向右旋转90度 基本思想是把它当作层,我们每次旋转一层。 假设我们有一个 4 x4 旋转后顺时针旋转 90 ...

  • 2020-07-02

    算法和数据结构梳理 线性表 顺序表数组(移动、原地操作、前缀和)多数组(合并 交集二维数组(旋转、数独、染色、置零...

  • 矩阵顺时针旋转90度

    n*n矩阵顺时针旋转90度 方法一:将二维数组顺时针旋转90度,就是将其转置后的数组的列进行前后交换(即第一列变为...

  • Day08

    二维数组 二维数组格式 二维数组初始化 二维数组的遍历 二维数组内存存储细节 二维数组与函数注意点: 主要是看函数...

  • PHP 工具之数组

    二维数组值 二维数组翻转 二维数组转置

网友评论

      本文标题:二维数组旋转90度、180度、270度

      本文链接:https://www.haomeiwen.com/subject/xkjaeftx.html