二維數組旋轉90度、180度、270度

圖像處理中,很多時候要使用到二維數組的旋轉。本質上二維數組的旋轉其實就是坐標的變換,即旋轉后的坐標(x,y)需要對應到原有二維數組的坐標點上,取到正確的值即可完成正確的旋轉。

王佳亮
圖像處理中,很多時候要使用到二維數組的旋轉。本質上二維數組的旋轉其實就是坐標的變換,即旋轉后的坐標(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;
}

————————————————
版權聲明:本文為CSDN博主「faithzzf」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/faithzzf/article/details/77009777
  • 756
  • 摘抄
  • https://blog.csdn.net/faithzzf/article/details/77009777
午夜a成v人电影,亚洲av永久无码精品漫画,中国china体内裑精亚洲日本,精品亚洲av精选一区二区三区,精品国产日韩欧美一区二区三区,勃起21厘米粗6厘米怎么办