首页
学习
活动
专区
工具
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 

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

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

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

相关·内容

  • OpenCV实现SfM(四):Bundle Adjustment

    在上一篇文章中,成功将三维重建扩展到了任意数量的图像,但是,随着图像的增多,累计误差会越来越大,从而影响最终的重建效果。要解决这个问题,需要用到Bundle Adjustment(下文简称BA)。 BA本质上是一个非线性优化算法,先来看看它的原型 min ⁡ x ∑ i ρ i ( ∣ ∣ f i ( x i 1 , x i 2 , . . . , x i k ) ∣ ∣ 2 ) \min_x \sum_i{\rho_i(||f_i(x_{i1}, x_{i2}, …, x_{ik})||^2)} xmin​i∑​ρi​(∣∣fi​(xi1​,xi2​,...,xik​)∣∣2) 其中 x x x是我们需要优化的参数, f f f一般称为代价函数(Cost Function), ρ \rho ρ为损失函数(Loss Function)。其中 f f f的返回值可能是一个向量,因此总的代价取该向量的2-范数。 对于三维重建中的BA,代价函数往往是反向投影误差,比如我们需要优化的参数有相机的内参(焦距、光心、畸变等)、外参(旋转和平移)以及点云,设图像 i i i的内参为 K i K_i Ki​,外参为 R i R_i Ri​和 T i T_i Ti​,点云中某一点的坐标为 P j P_j Pj​,该点在 i i i图像中的像素坐标为 p j i p_j^i pji​,则可以写出反向投影误差 f ( K i , R i , T i , P j ) = π ( K i [ R i T i ] P j ) − p j i f(K_i, R_i, T_i, P_j)=\pi(K_i[R_i\ \ T_i]P_j) – p_j^i f(Ki​,Ri​,Ti​,Pj​)=π(Ki​[Ri​ Ti​]Pj​)−pji​ 上式中的 P j P_j Pj​和 p j i p_j^i pji​均为齐次坐标,其中 π \pi π为投影函数,有 π ( p ) = ( p x / p z , p y / p z , 1 ) \pi(p)=(p_x/p_z,\ p_y/p_z,\ 1) π(p)=(px​/pz​, py​/pz​, 1). 而损失函数 ρ \rho ρ的目的是为了增强算法的鲁棒性,使得算法不易受离群点(Outliers)的影响,常见的有Huber函数、Tukey函数等,这些函数的图像如下

    02
    领券