【发布时间】:2017-11-25 13:35:44
【问题描述】:
我在 c 中试验二维数组操作。特别是二维形状的就地旋转,所以我做了我的研究并想出了:
#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);
}
我期待得到这样的输出:
然而我得到的是:
我做了我从研究中了解到的: - 旋转确实发生在原点(假设左上角) - 移动坐标,使其处于原始比例。 - 旋转时使用输出数组的维度作为空间。
我很困惑,我需要一点帮助。 正如你从我的代码中看到的那样,我对新的旋转尺寸进行了硬编码, 但是,如果有人可以指导我如何动态计算新的旋转尺寸,而不使用“最大角”方法,那就太好了。
【问题讨论】:
-
您实际上是按角度旋转以获得索引?
-
是的,我将索引固定为坐标