C++ 旋转矩阵/图像90°C+的公式+;
假设我有一个图像,我需要在任何方向上旋转90度,我只是不知道如何才能做到这一点。我需要使用矩阵,其中宽度是X,高度是Y。我已经将图像旋转了180度,但无法计算出90度 下面是一些例子。假设我有一个3x4像素的图像。宽度=3,高度=4,每个单元格中的数据量-C++ 旋转矩阵/图像90°C+的公式+;,c++,image,matrix,C++,Image,Matrix,假设我有一个图像,我需要在任何方向上旋转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
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度的公式。您能帮我吗?您可以轻松地将(x+y*宽度)转换为更简单的(x,y)表示形式
using P = point_data_type;
P point(int x, int y){
return DataIn[x + y * width]; // N - ...?
}
现在,直角旋转只是一个坐标转换,也许是一个符号修正
P rotate90(int x, int y){
return point(y, x);
}
这是左手系统中的正旋转。
如果旋转方向错误,则从宽度中减去x 您可以轻松地将(x+y*宽度)转换为更简单的(x,y)表示形式
using P = point_data_type;
P point(int x, int y){
return DataIn[x + y * width]; // N - ...?
}
现在,直角旋转只是一个坐标转换,也许是一个符号修正
P rotate90(int x, int y){
return point(y, x);
}
这是左手系统中的正旋转。
如果旋转方向错误,则从宽度中减去x 您可以通过以下方式简单地旋转矩阵:
for(int i=0; i<cols; i++)
{
for(int j=1; j<=rows; j++)
{
datOut[i][j]= datIn[rows-j][i];
}
}
对于(int i=0;i您可以通过以下方式简单地旋转矩阵:
for(int i=0; i<cols; i++)
{
for(int j=1; j<=rows; j++)
{
datOut[i][j]= datIn[rows-j][i];
}
}
对于(int i=0;i您需要矩阵乘法,例如,90度旋转矩阵是[[0,-1],[1,0]]
,180度矩阵是[[1,0],[0,-1]]
。将每个点与矩阵相乘以获得点的旋转位置。对于任何角度a
,旋转矩阵是[[cos(a),-sin(a)],[sin(a),cos(a)]
。为此需要矩阵乘法,例如,90度旋转矩阵是[[0,-1],[1,0]
,180度矩阵是[[1,0],[0,-1]]
。将每个点与矩阵相乘以获得点的旋转位置。对于任何角度a
,旋转矩阵是[[cos(a),-sin(a)],[sin(a),cos(a)]]
。