作者: 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
提示: 作者被禁止或刪除 內容自動屏蔽

