Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 旋转矩阵/图像90°C+的公式+;_C++_Image_Matrix - Fatal编程技术网

C++ 旋转矩阵/图像90°C+的公式+;

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

假设我有一个图像,我需要在任何方向上旋转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度的公式。您能帮我吗?

您可以轻松地将(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)]]