假设我有图像,我需要向任何方向旋转90度,我只是无法理解如何清楚地做到这一点。我需要使用矩阵,其中宽度 - 它是X,高度 - 它是Y.我已经完成了将图像旋转180度,但无法计算出90度。
以下是示例。假设我的图像为3x4像素。宽度= 3,高度= 4,每个单元格中的数据量 - N = Width * Height = 3 * 4 = 12
。让我们制作矩阵:
轻松浏览矩阵的公式为y*Width + x
。我们旋转180度的公式是:
N - Width + x - y * Width
所以我们有:
DataOut [y * Width + x] = DataIn [N - Width + x - y * Width]
使用这个公式我们得到:
但我无法想出旋转90度的公式。你能帮帮我吗?
答案 0 :(得分:2)
你可以简单地旋转矩阵:
for(int i=0; i<cols; i++)
{
for(int j=1; j<=rows; j++)
{
datOut[i][j]= datIn[rows-j][i];
}
}
和一维数组:
for(int i=0; i<cols; i++)
{
for(int j=1; j<=rows; j++)
{
datOut[i * rows + j]= datIn[(rows-j) * cols + i];
}
}
答案 1 :(得分:0)
您可以轻松地将(x + y * width)转换为更简单的(x,y)表示。
P rotate90(int x, int y){
return point(y, x);
}
现在,直角旋转只是一个坐标开关,可能是一个符号校正。
{{1}}
这是左撇子系统的正向旋转。 如果旋转方向错误,则从宽度减去x。