私は、cで2次元配列操作を実験していました。特に2D形状のインプレース回転ので、私は私の研究を行なったし、思い付いた:私はこのような出力を得るために期待していたCの長方形配列の2D回転
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define RAD(x) ((x) * 3.14/180)
char shape[3][3] = {{1, 1, 1},
{1, 0, 1},
{1, 1, 1}};
char nf[5][5]= {{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0},
{0, 0, 0, 0, 0}};
char expa[5][5]= {{0, 0, 1, 0, 0},
{0, 1, 0, 1, 0},
{1, 0, 0, 0, 1},
{0, 1, 0, 1, 0},
{0, 0, 1, 0, 0}};
void print(int row, int col, char shapein[][col]) {
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
printf("%c", ((shapein[i][j]) == 1) ? '#' : ' ');
}
printf("\n");
}
}
void main() {
int nw = 5;
int nh = 5;
int xf = nw/2;
int yf = nh/2;
float angle = RAD(90);
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
int nx = ((i - xf) * cos(angle) - (j - yf) * sin(angle)) + xf;
int ny = ((i - xf) * sin(angle) + (j - yf) * cos(angle)) + yf;
nf[nx][ny] = shape[i][j];
}
}
print(5, 5, nf);
}
:
をしかし、私は何を得ます次のとおりです。
私は私の研究から理解何をした: - rotati (左上を前提とする) - 元のスケールになるように移動します。 - 出力配列の次元を回転時のスペースとして使用します。
私は困惑しています。少し助けが必要です。 私のコードからわかるように、 新しい回転寸法をハードコード化しましたが、「最大角」法を使用せずに新しい回転寸法を動的に計算する方法を教えてくれればいいと思います。予想
インデックスを取得するために文字通り回転していますか? – coderredoc
はい、私はコード – user3414321