[英]Formula of rotating matrix/image 90 degree C++
假设我有图像,我需要在任何方向上旋转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度的公式。 你能帮我吗?
您可以通过以下方法简单地旋转矩阵:
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];
}
}
您可以轻松地将(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);
}
在左撇子系统中这是正旋转。 如果旋转方向错误,则从Width中减去x。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.