我正在用c中的2d數組操作進行實驗。就地尤其是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確實發生在原點(假設左上角) - 移動的座標,以便它在原點範圍內。 - 旋轉時使用輸出數組的維度作爲空間。
我很難過,我需要一點幫助。 雖然在它上面,但是從我的代碼中可以看到,我硬編碼了新的旋轉尺寸,但是,如果有人能夠指導我如何動態計算新的旋轉尺寸,而不使用「最大角點」方法。
你是literallly角度旋轉得到指數? – coderredoc
是的,我將這些索引作爲座標 – user3414321