首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将矩阵(2d-std::vector)旋转90°

将矩阵(2d-std::vector)旋转90°是一个常见的编程问题,可以通过以下方式实现:

  1. 创建一个新的矩阵,并将其大小设置为原始矩阵的列数作为行数,行数作为列数。
  2. 使用两个嵌套的循环,将原始矩阵的每个元素复制到新的矩阵中,但是需要注意行列的转换。
  3. 如果原始矩阵是一个N x N的矩阵,则只需要进行一半的元素交换即可,可以通过将循环的范围限制为N/2来实现。

以下是一个示例的C++代码实现:

代码语言:txt
复制
#include <iostream>
#include <vector>

// 定义一个函数来旋转矩阵
std::vector<std::vector<int>> rotateMatrix(std::vector<std::vector<int>>& matrix) {
    int n = matrix.size(); // 获取矩阵的大小

    // 创建一个新的矩阵
    std::vector<std::vector<int>> rotatedMatrix(n, std::vector<int>(n, 0));

    // 进行矩阵旋转
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            rotatedMatrix[j][n - i - 1] = matrix[i][j];
        }
    }

    return rotatedMatrix;
}

int main() {
    // 创建一个示例矩阵
    std::vector<std::vector<int>> matrix = {{1, 2, 3},
                                            {4, 5, 6},
                                            {7, 8, 9}};

    // 调用旋转矩阵函数
    std::vector<std::vector<int>> rotatedMatrix = rotateMatrix(matrix);

    // 输出旋转后的矩阵
    for (int i = 0; i < rotatedMatrix.size(); i++) {
        for (int j = 0; j < rotatedMatrix[i].size(); j++) {
            std::cout << rotatedMatrix[i][j] << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

运行上述代码,将会输出旋转后的矩阵:

代码语言:txt
复制
7 4 1 
8 5 2 
9 6 3 

这是一个基本的矩阵旋转问题的解决方案。对于更复杂的情况,比如在原地旋转矩阵或者使用不同的编程语言,可以进行进一步的研究和实现。

腾讯云相关产品和产品介绍链接地址:暂无推荐链接。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • LeetCode48, 如何让矩阵原地旋转90

    今天是LeetCode第29篇,我们来看一道简单的矩阵旋转问题。 题意 题目的要求很简单,给定一个二维方形矩阵,要求返回矩阵旋转90度之后的结果。 下面我们来看两个例子: ? ?...题解 这个动图一看就明白了,也就是说我们需要将一个二维矩阵顺时针旋转90度。这个题意我们都很好理解,但是题目当中还有一个限制条件:我们不能额外申请其他的数组来辅助,也就是对我们的空间利用进行了限制。...如果没有这个条件限制其实很容易,我们只需要算出每一个坐标旋转之后的位置,我们重新创建一个数组然后依次填充就行了。 我们忽略矩阵当中具体的数据,而来看看矩阵旋转前后的坐标变化。...这是矩阵旋转之前的坐标: ? 旋转之后,坐标变成了: ? 我们对照上面两张图观察一下,可以看出对于坐标(i, j)来说,它旋转90度之后得到的结果应该是(j, n-1-i)。这里的n是行数。...而(j, n-1-i)位置的点旋转之后到了(n-1-i, n-1-j),同理(n-1-i, n-1-j)旋转之后到了(n-1-j, i),最后我们发现(n-1-j, i)旋转之后回到了(i, j)。

    62210

    Python如何图像向右旋转90

    如果直接套用PIL和OpenCV3图像处理库的旋转函数,旋转后保存的图像会留黑边,下面给出我实际测试后旋转图像不留黑边的代码: Opencv3库代码 # 方法一:图像向右旋转90度 file1 = '...= np.rot90(img, -1) # 对图像矩阵顺时针旋转90度 cv2.imshow("rotate", img90) print('After rotate image shape is...',img90.shape) # cv2.imwrite(file1, img90) # 保存旋转后的图像 cv2.waitKey(0) # 方法二:图像向右旋转90度 file1 = 'E:/Kaggle...) print('After rotate image shape is',img90.shape) # cv2.imwrite(file1, img90) # 保存旋转后的图像 cv2.waitKey...(0) 程序运行结果: PIL库代码 # 图像转化为灰度图后向右旋转90度 file1 = 'E:/Kaggle Competiton/Humpback Whale Identification/train_fluke

    2K20

    矩阵旋转,你转晕了吗?

    返回执行 k 次循环轮转操作后的矩阵。 题解 本题的旋转不是旋转角度,而是旋转步数,我们可以先将矩阵分为多层,每一层单独旋转。...矩阵的层数是 这道题比较有意思的地方是可以每一层的数据放到一个数组中,然后走几步就是增加步数取余操作。可以理解为通过取余做成循环数组。...旋转图像 给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。...请不要 使用另一个矩阵旋转图像。 题解 这一题是旋转角度,矩阵是正方形。这个题目要求原地旋转矩阵,也就是不使用额外的矩阵。这里先讲下如何使用额外的矩阵做法。 对于矩阵: ? 第一行旋转后是: ?...矩阵通过水平翻转和对角线翻转后刚好是旋转90矩阵,如下图: ? 水平翻转 ? 对角线翻转 ?

    1.4K20

    Unity精华☀️三、四元数(Quaternion)解决万向锁

    (1,1,1); } 优点: 很容易理解,形象直观; 表示更方便,只需要3个值(分别对应x、y、z轴的旋转角度);但按我的理解,它还是转换到了3个3*3的矩阵做变换,效率不如四元数; 缺点: 之前提到过这种方法是要按照一个固定的坐标轴的顺序旋转的....zero; transform.DOLocalRotate(new Vector3(90, 90, 90), 0.5f); } 2️⃣ 四元数旋转 优点: 可以避免万向节锁现象...; 只需要一个4维的四元数就可以执行绕任意过原点的向量的旋转,方便快捷,在某些实现下比旋转矩阵效率更高; 可以提供平滑插值; 四元数遇到万向锁可提供平滑的差值运算 代码:...transform.rotation = targetAngels; } } 3️⃣ Rotate,绕自身坐标系旋转 物体,绕自身的动态坐标系,旋转x角度。...(new Vector3(0, 90, 0), Space.Self); 4️⃣ Rotate,绕世界坐标系旋转 物体,绕世界的静态坐标系,旋转x角度。

    11810

    Unity基础(17)-四元数与欧拉角与矩阵

    Unity中四元数API 1.来把角度转化为相应四元素 Quaternion rot=Quaternion.Euler(30,60,90); 旋转顺序是,先绕Z轴转动90度,再绕X轴转动30度,最后绕Y...(0,0,45); Quaternion rot=rot2*rot1; 意思是先绕y旋转30度再绕z旋转45度,所以,你要先绕哪个四元素先旋转就放最右边 4.四元素与向量相乘,得到的是原向量旋转后的新向量...Vector3 to = Quaternion.AngleAxis(45, Vector3.up)* Vector3.forward to是Vector3.forward绕Vector3.up...3、局限性 欧拉角会产生万向锁bug 一旦选择pitch角为±90°,就被限制在只能绕垂直轴旋转 三、矩阵 1、概念 矩阵通常用在一些特殊的地方,例如摄像机的非标准投影。...旋转矩阵到四元数 使用Quaternion类的LookRotation函数 static Quaternion LookRotation(Vector3 forward,Vector3 upwards

    4.7K33

    LeetCode初级算法之数组:旋转图像

    题目描述: 给定一个 n × n 的二维矩阵表示一个图像。 图像顺时针旋转 90 度。 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵旋转图像。...示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3...// 矩阵转置 for (int i=0; i<rownum; i++) { for (int j=0; j<i; j++)...所以一次遍历即可实现,最终的代码如下: class Solution { public: void rotate(vector >& matrix) {...这是旋转90度,如果逆时针旋转90或者是多少度的时候,也最好先从第一个思路开始出发,看看能不能简单的转置加逆序搞定,搞不定的时候,再考虑第二种思路。

    93730

    从零开始学习自动驾驶系统(八)-基础知识之车辆姿态表达

    欧拉角的缺点: 欧拉角的一个重大缺点是会碰到著名的万向锁(Gimbal Lock)问题:在俯仰角为±90deg时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由三次旋转变成了两次旋转...单位四元数表示一个三维空间旋转 设 q 为一个单位四元数,而 p 是一个纯四元数,则 image.png 也是一个纯四元数,可以证明 image.png 表示一个旋转点p旋转到空间的另一个点 image.png...旋转角度与四元数的转化 四元数绕坐标轴的旋转转化为绕向量的旋转,假设某个旋转是绕单位向量 image.png 进行了角度为 image.png 的旋转,那么这个旋转的四元数形式为: image.png...、旋转矩阵旋转向量转换 2.3.1 旋转向量到旋转矩阵、欧拉角、四元数的转换 定义旋转向量 // 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector...(alpha, Eigen::Vector3d(x,y,z)) 旋转向量到旋转矩阵: //旋转向量转旋转矩阵 Eigen::Matrix3d rotation_matrix = rotation_vector.matrix

    2.6K10

    游戏开发中的矩阵与变换

    变换在大多数情况下都以平移,旋转和缩放的形式应用,因此我们重点介绍如何用矩阵表示那些变换。...旋转变换矩阵 我们将以与之前相同的方式开始,在身份矩阵下方添加Godot徽标: 例如,假设我们要顺时针旋转Godot徽标90度。现在,X轴指向右侧,Y轴指向下方。...无论您在哪里完成旋转,向量的方向都会确定矩阵是什么。 我们需要在法线坐标中表示“下”和“左”,所以这意味着我们X设置为(0,1),Y设置为(-1,0)。...该translation()方法将对象转换相对于其自身的旋转。例如,当使用Vector2.UP translation()时,顺时针旋转90度的对象向右移动。...2D变换矩阵的基础在两个Vector2值中具有四个总数,而旋转值和比例尺Vector2仅具有3个数。缺少自由度的高级概念称为剪切。 通常,您将始终使基本向量彼此垂直。

    1.5K20
    领券