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

图像处理中,很多时候要使用到二维数组的旋转。本质上二维数组的旋转其实就是坐标的变换,即旋转后的坐标(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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,268评论 25 709
  • 1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi阅读 10,616评论 3 23
  • 过完了胡吃海塞的新年,又胡吃海塞了几天,怎么也吃不胖的身体终于惹了天怒,在邻近开学时病了一场。 年三十得了感冒一直...
    竹爻阅读 2,507评论 0 0
  • 自然,自信 说话要自信,不要怕,不然你就不能很好的表达自己的观点,让自己这样怕自己控制不住自己,就像乔同事那样,觉...
    三不主义阅读 1,625评论 0 0
  • 1.感谢中午的时候家瑄给我打的一壶热水,睡觉前泡脚很舒服。 2.感谢三食堂一楼水果店老板卖给我的一盒西瓜,西瓜沙沙...
    活着的小哥阅读 847评论 0 0

友情链接更多精彩内容