Board logo

標題: [技術討論] 點樣 rotate 1 個 2D array? [打印本頁]

作者: ghostkcleung    時間: 2021-7-4 13:17     標題: 點樣 rotate 1 個 2D array?

喺 Google search 到嗰啲,
都係 3x3, 4x4, 5x5 ... 方陣。

我想 Rotate 一個 X*Y 嘅 array 真係搵唔到。
作者: KinChungE    時間: 2021-7-4 14:07

如果array唔係方形, 基本上唯有開新array再deep copy
連dimension都唔同

p.s. Matlab一粒character (')就做到以上既野
作者: ghostkcleung    時間: 2021-7-4 16:03

本帖最後由 ghostkcleung 於 2021-7-4 16:05 編輯

開多一個嘅話,唔夠 memory。

我個 2d array 係用一條 1d array 去 store。

int w = width;
void set ( int x, int y, int value ) {
  arr [ y*w+x ] = value ;
}

int get ( int x, int y ) {
  return arr[y*w+x];
}

不過我已經用咗其他方法解決。

如果array唔係方形, 基本上唯有開新array再deep copy
連dimension都唔同

p.s. Matlab一粒character  ...
KinChungE 發表於 2021-7-4 14:07

作者: KinChungE    時間: 2021-7-4 16:57

開多一個嘅話,唔夠 memory。

我個 2d array 係用一條 1d array 去 store。

int w = width;
void set ( i ...
ghostkcleung 發表於 2021-7-4 16:03


如果係咁的話, rotate應該唔好改任何data, 純綷加支boolean flag記住係咪rotate左
然後響set同get入面加個if
作者: ghostkcleung    時間: 2021-7-4 23:31

本帖最後由 ghostkcleung 於 2021-7-4 23:37 編輯

終於鬥惦咗。

// w: width, h:height,
//r: rotate ( 0 to 7 )
// rotate 0: CW0, 2: CW90, 4: CW180, 6: CW270
// rotate 1, 3, 5, 7 are mirror of 0, 2, 4, 6

for(int16_t y=0; y<=h; y++) {
        for(int16_t x=0; x<=w; x++) {
                switch ( r ) {
                case 0:
                        data[y*w+x]=value;
                        break;
                case 1:
                        data[(y+1)*w-x-1]=value;
                        break;
                case 2:
                        data[(x+1)*w-y-1]=value;
                        break;
                case 3:
                        data[(h-x)*w-y-1]=value;
                        break;
                case 4:
                        data[(h-y)*w-x-1]=value;
                        break;
                case 5:
                        data[(h-y-1)*w+x]=value;
                        break;
                case 6:
                        data[(h-1-x)*w+y]=value;
                        break;
                case 7:
                        data[x*w+y]=value;
                        break;
                }
        }
}
作者: toylet    時間: 2021-7-9 21:04

提示: 作者被禁止或刪除 內容自動屏蔽





歡迎光臨 電腦領域 HKEPC Hardware (https://h1.hkepc.com/forum/) Powered by Discuz! 7.2