旋转矩阵

LeetCode 面试题 01.07. 旋转矩阵

妖精的绣舞 提交于 2020-04-07 15:56:20
题目 给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法, 将图像旋转 90 度。不占用额外内存空间能否做到? 示例 给定 矩阵 [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 思路:先将其写斜对角线翻折,再对每行以中点为中心翻折 [1,2,3], [1,4,7], [7,4,1], [4,5,6], ===> [2,5,8], ===> [8,5,2], [7,8,9] [3,6,9] [9,6,3] 代码 public void rotate(int[][] matrix) { for(int i=0; i<matrix.length; i++){ for(int j=i+1; j<matrix[0].length; j++){ int t = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = t; } } int n = matrix.length; int mid = n/2; for(int i=0; i<matrix.length; i++){ for(int j=0; j<mid; j++){ int t = matrix[i][j]; matrix[i][j]

90度旋转矩阵

我的梦境 提交于 2020-02-20 03:54:48
先左右对称反转,再沿右对角线对折,面试记住就行了 代码: 1 class Solution { 2 public: 3 void rotate(vector<vector<int>>& matrix) { 4 int len = matrix.size(); 5 //左右翻 6 for(int i=0;i<len;i++){ 7 for(int j=0;j<len/2;j++){ 8 int temp = matrix[i][j]; 9 matrix[i][j] = matrix[i][len-1-j]; 10 matrix[i][len-1-j] = temp; 11 } 12 } 13 //对角线翻转 14 for(int i=0;i<len;i++){ 15 for(int j=0;j<len-i;j++){ 16 int temp = matrix[i][j]; 17 matrix[i][j] = matrix[len-1-j][len-1-i]; 18 matrix[len-1-j][len-1-i] = temp; 19 } 20 } 21 } 22 }; 来源: https://www.cnblogs.com/FdWzy/p/12334155.html

机器人学之运动学(一):运动学描述基础

半城伤御伤魂 提交于 2020-02-08 18:08:58
目录 1.刚体运动状态描述 2.移动 3.转动 4.选择矩阵 1.刚体运动状态描述 平面 首先在平面上定义世界坐标系(world frame),一个平面上有三个自由度来描述刚体,即2个移动自由度(沿x轴水平移动和沿y轴上下移动)和1个旋转自由度(沿刚体质心顺/逆时针转动)。 空间 建立三维空间直角坐标系,一个空间内有6个自由度解释刚体的运动,即3个移动自由度(沿x,y,z轴移动)和3个转动自由度(沿x,y,z轴旋转) 整合刚体的状态 在刚体上建立坐标系(body frame),常建立在质心上 移动:由body frame的原始位置决定,即刚体质心相对世界坐标系原点的位置 转动:由body frame的姿态决定,即3个坐标轴相对世界坐标系的姿态 刚体运动状态的描述 记录不同时间点刚体质心的轨迹,已知轨迹的位置,求得轨迹对时间的微分,就是质心的速度,再次微分,就是质心运动的加速度。 已知刚体转动的姿态,由微分和二次微分,可求得刚体转动的角速度和角加速度。 借由刚体在平面上的三个自由度和空间上的六个自由度的微分和二次微分,可以知道刚体的移动和转动状态。 2.移动 移动:以向量 P ⃗ \vec P P 描述建立在刚体上的坐标系{B}的原点相对世界坐标系{A}的状态。 将刚体质心相对于{A}的位置映射为向量,与世界坐标做连接。 假设质心P坐标可以表示为: P ⃗ = [ P x P y P

旋转矩阵、欧拉角、四元数理论及其转换关系

元气小坏坏 提交于 2020-01-31 04:10:32
https://www.cnblogs.com/flyinggod/p/8144100.html 这才真正说清了 欧拉角的含义。 从旋转矩阵 来理解 才是最正确的方法。 线性代数 能解释旋转矩阵 以后再回炉把, 总算弄清楚了。 之前定义都搞错。 以为是,x,y,z 3个轴各自旋转,坑到家了。 旋转矩阵、欧拉角、四元数理论及其转换关系 博客转载自:http://blog.csdn.net/lql0716/article/details/72597719 1. 概述 旋转矩阵、欧拉角、四元数主要用于表示坐标系中的旋转关系,它们之间的转换关系可以减小一些算法的复杂度。 本文主要介绍了旋转矩阵、欧拉角、四元数的基本理论及其之间的转换关系。 2、原理 2.1 旋转矩阵 对于两个三维点 p 1 ( x 1 , y 1 , z 1 ), p 2 ( x 2 , y 2 , z 2 ),由点 p 1 经过旋转矩阵 R 旋转到 p 2,则有 注:旋转矩阵为正交矩阵 R R T = E 任意旋转矩阵: 任何一个旋转可以表示为依次绕着三个旋转轴旋三个角度的组合。这三个角度称为 欧拉角 。 三个轴可以指固定的世界坐标系轴,也可以指被旋转的物体坐标系的轴。三个旋转轴次序不同,会导致结果不同。 2.2 欧拉角 欧拉角有两种: 静态 :即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态。

罗德里格斯(Rodrigues)旋转向量与矩阵的变换

岁酱吖の 提交于 2020-01-28 17:15:25
在做双目立体视觉深度图像生成的时候,遇到旋转向量(1x3)与旋转矩阵(3x3)的概念,得知二者可以通过罗德里格斯相互转化。 1.旋转的表示 处理三维旋转问题时,通常采用旋转矩阵的方式来描述旋转变换。旋转矩阵有以下两种方式得到。 物体在三维空间中的旋转,可以被分为解为在直接坐标系下,分别先后围绕x,y,z坐标轴旋转得到。旋转的角度也就是我们常听到的角度roll,pitch,yew。如果已知这几个角度,就可以直接通过每一步的矩阵相乘得到整个旋转矩阵。 R=R(yaw)R(pitch)R(roll) R=R(yaw)R(pitch)R(roll) 旋转矩阵还可以理解为围绕空间中某一个向量,直接一次旋转某一个角度得到。在openCV相机标定时得到的旋转向量就是用这种方式。即由旋转变量来描述。 2.旋转向量得到旋转矩阵 旋转向量的长度(模)表示绕轴逆时针旋转的角度(弧度)。旋转向量与旋转矩阵可以通过罗德里格斯(Rodrigues)变换进行转换。 旋转角度 (norm表示求向量r的模长) 单位向量 旋转矩阵 其中为单位矩阵,为的转置。 所以 3.根据旋转向量求另一个旋转向量 用表示待旋转的向量,为旋转向量的单位向量,为旋转角,旋转后的向量可以表示为 4.根据两个旋转向量求旋转矩阵 (1)旋转角度 已知旋转前向量为P, 旋转后变为Q。由点积定义可知: 可推出P,Q之间的夹角为: (2)旋转轴

旋转矩阵

落花浮王杯 提交于 2020-01-14 17:34:38
class Solution: def rotate(self, matrix): """ :type matrix: List[List[int]] :rtype: void Do not return anything, modify matrix in-place instead. """ m = len(matrix) n = len(matrix[0]) for i in range(m): for j in range(i + 1): self.swap(matrix, i, j, j, i) for i in range(n // 2): for j in range(m): self.swap(matrix, j, i, j, n - 1 - i) def swap(self, matrix, i1, j1, i2, j2): matrix[i1][j1]= matrix[i2][j2] 来源: CSDN 作者: ailinyingai 链接: https://blog.csdn.net/ailinyingai/article/details/103975476

线性代数---特征值与特征向量(***重要***)

心已入冬 提交于 2020-01-07 07:46:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 怎么求特征值和特征向量? 实例: ξ是初始单位向量组 A是旋转矩阵。 基本性质: 非奇异也叫做满秩,非退化,可逆 矩阵的行列式与矩阵行列式的转置是一样的 最后结果得出:特征方程一样,则特征值一样。 运用根与系数关系公式直接套就可以。 迹-----所有的对角线元素都加起来。 例题: 方法一:如果不验证有可能不正确,不够严谨。 通过方法二可知等于1这个条件是多余的。 来源: oschina 链接: https://my.oschina.net/u/2914586/blog/783856

pointnet代码理解

穿精又带淫゛_ 提交于 2019-12-25 13:01:20
PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation PointNet Architecture 分类 点云(nx3-nx64) def get_model(point_cloud, is_training, bn_decay=None): """ Classification PointNet, input is BxNx3, output Bx40 """ batch_size = point_cloud.get_shape()[0].value num_point = point_cloud.get_shape()[1].value end_points = {} #得到点云的规范化选择矩阵,将原始点云输入进行规范化处理。 with tf.variable_scope('transform_net1') as sc: #创建一个命名空间,名为:transform_net1,然后在作用域下定义一个变量transform。 transform = input_transform_net(point_cloud, is_training, bn_decay, K=3) # 预测出旋转矩阵T(个人理解因为输入点云维度为3,所以这里定义K=3,即确定了旋转矩阵的大小)。 point

Leetcode刷题记录 旋转矩阵

两盒软妹~` 提交于 2019-12-23 02:33:49
https://leetcode-cn.com/problems/spiral-matrix/submissions/ class Solution(object): def spiralOrder(self, matrix): """ :type matrix: List[List[int]] :rtype: List[int] """ if matrix == []: return [] results = [matrix[0][0]] matrix[0][0] = None column = 0 row = 0 c_max = len(matrix[0]) - 1 r_max = len(matrix) - 1 while True: while column + 1 <= c_max and matrix[row][column + 1] != None: column += 1 results.append(matrix[row][column]) matrix[row][column] = None if row + 1 > r_max or matrix[row + 1][column] == None: break while row + 1 <= r_max and matrix[row + 1][column] != None: row += 1 results

6-DoF相关基础知识整理

岁酱吖の 提交于 2019-12-09 22:24:28
刚刚接触这个领域,因此打算花点时间先整理一下相关的一些基础的知识。 首先是第一个概念 一、什么是6-DoF,即6个自由度是什么? 首先,先解释一下自由度,自由度与刚体在空间中的运动相关。可以理解为物体移动的不同基本方式。 自由度一共有6个,可以分为两种类型:平移和旋转。 1. 平移运动   刚体可以在3个自由度中平移:向前/后,向上/下,向左/右 2. 旋转运动   刚体在3个自由度中旋转:纵摇(Pitch)、横摇(Roll)、垂摇(Yaw) 因此,3种类型的平移自由度+3种类型的旋转自由度 = 6自由度 在任意一个自由度中,物体可以沿两个“方向”自由运动。例如,电梯限制在1个自由度中(垂直平移),但电梯能够在这个自由度中上下运动。同样,摩天轮限制在1个自由度中,但这是旋转自由度,所以摩天轮能够朝相反的方向旋转。 我们可以继续举例子,比如说主题公园。碰碰车总共有3个自由度:它只能在3轴中的2条里平移(无法像电梯那样上下移动);然后它只能以一种方式旋转(无法像飞机那样纵摇和垂摇)。 所以2个平移+1个旋转=3自由度。 无论有多复杂,刚体的任何可能性运动都可以通过6自由度的组合进行表达。 例如在你用球拍击打网球的时候,球拍的复杂运动可以表示为平移和旋转的组合。 二、PnP算法 1. PnP算法是什么? PnP(Perspective-n-Point)是求解 3D 到 2D