将 3d 4x4 旋转矩阵转换为 2d

2023-12-29

假设我们有一个 4x4 矩阵,其索引如下:

00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33

如何将该矩阵中包含的旋转数据(忽略 z 轴,如果有帮助的话)转换为单个 2d 旋转角度(以弧度为单位)?

背景:我有一个从 Blender 导出为 Collada 格式的 3D .dae 动画。从技术上讲,动画是 2d 的,所有 z 轴值都是 0。我试图将 4x4 矩阵转换为 2d 平移、旋转和缩放数据。


尺度矩阵S看起来像这样:

sx 0  0  0
0  sy 0  0
0  0  sz 0
0  0  0  1

翻译矩阵T看起来像这样:

1  0  0  0
0  1  0  0
0  0  1  0
tx ty tz 1

Z轴旋转矩阵R看起来像这样:

 cos(a) sin(a)  0  0
-sin(a) cos(a)  0  0
   0      0     1  0
   0      0     0  1

如果你有一个变换矩阵M,它是多次乘法的结果R, T and S矩阵。看着M,这些乘法的顺序和次数未知。但是,如果我们假设M=S*R*T我们可以将其分解为单独的矩阵。首先我们来计算一下S*R*T:

        ( sx*cos(a) sx*sin(a) 0  0)       (m11 m12 m13 m14)
S*R*T = (-sy*sin(a) sy*cos(a) 0  0) = M = (m21 m22 m23 m24)
        (     0         0     sz 0)       (m31 m32 m33 m34)
        (     tx        ty    tz 1)       (m41 m42 m43 m44)

由于我们知道这是一个 2D 转换,因此获得翻译非常简单:

translation = vector2D(tx, ty) = vector2D(m41, m42)

为了计算旋转和缩放,我们可以使用sin(a)^2+cos(a)^2=1:

(m11 / sx)^2 + (m12 / sx)^2 = 1
(m21 / sy)^2 + (m22 / sy)^2 = 1

m11^2 + m12^2 = sx^2
m21^2 + m22^2 = sy^2

sx = sqrt(m11^2 + m12^2)
sy = sqrt(m21^2 + m22^2)

scale = vector2D(sx, sy)

rotation_angle = atan2(sx*m22, sy*m12)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 3d 4x4 旋转矩阵转换为 2d 的相关文章

  • Matlab:通过扩展向量来扩展矩阵

    我有一个dxmxn matrix A 解释 对于每个n 有m维度向量d 我想将每个 d 维向量扩展如下 考虑一个向量v维度 d 1 2 d 它是 x 1 x 2 x d 但为了简单起见 我删除了 x 目标是延长v获得一个d d向量形式 1
  • matlab中的分箱

    我一直无法在 matlab 或 Octave 中找到函数来完成我想要的操作 我有一个两列的矩阵 m x 和 y 值 我知道我可以通过执行 m 1 或 m 2 来提取列 我想将其分成 可能 大小相等的较小矩阵 并绘制这些矩阵的平均值 换句话说
  • 制作具有行和列约束的随机存在/不存在矩阵(因此是布尔值)

    我正在尝试在 R 中创建一个随机矩阵 它需要是一个存在 不存在矩阵 以便矩阵中的所有值都为 0 或 1 但我还需要指定行和列总计 例如 5x5 表 其中 行总计为 r1 4 r2 2 r3 3 r4 5 r5 3 列总计为 c1 5 c2
  • 不均匀圆盘的最佳覆盖

    What kind of algorithm can I use to search for an optimal minimum area covering of a limited region of the XY plane with
  • 将 openCV 矩阵转换为向量

    看起来很容易 毕竟我们知道 std 或 openCV 向量可以轻松转换为矩阵 如下所示 vector
  • 如何从二进制文件写入/读取特征矩阵

    要将 Eigen Matrix 写入文件 我真的很喜欢使用以下命令 typedef Eigen Matrix
  • 在Matlab中将矩阵中的元素i,j设置为i*j

    我想生成一个矩阵 其中 i j 元素等于 i j 其中 i j e g 0 2 3 2 0 6 3 6 0 到目前为止 我已经发现我可以使用这个索引矩阵访问非对角线元素 idx 1 eye 3 但我还没有弄清楚如何将矩阵单元的索引合并到计算
  • Python lmfit:拟合 2D 模型

    我正在尝试将二维高斯拟合到一些灰度图像数据 该数据由一个二维数组给出 lmfit 库实现了一个易于使用的模型类 它应该能够做到这一点 不幸的是文档 http lmfit github io lmfit py model html http
  • PHP 矩阵的逆矩阵

    I saw 这个问题 https stackoverflow com questions 211160 python inverse of a matrix 并弹出这个想法 PHP 有没有一种有效的方法来做到这一点 EDIT 最好有演示 你
  • Unity3D:在 AA 解析后绘制粒子以提高性能

    我正在尝试评估 MSAA 对 Unity 中含有大量粒子的场景的影响 为此 我需要 使用 8x MSAA 绘制场景中的所有非粒子对象 使用上一个通道中解析的深度缓冲区来渲染所有 将非遮挡粒子系统转移到较小的渲染目标上 将 2 的颜色缓冲区与
  • 二维几何:如何检查点是否在角度内

    我有以下二维几何问题 我有一个点 从该点投射一个无限角度 2D 锥体 该角度由方向和角度给出 该点和方向形成一个向量 并且角度的每一侧一半形成 2D 锥体 现在我想检查 2D 中的另一个点是在这个圆锥体内部还是外部 如何才能实现这一目标 谢
  • 投影 3D 网格的 2D 轮廓算法

    给定 一个 3D 网格 由一组顶点和三角形定义 并用这些点构建网格 问题 找到任意平面上投影的任意旋转网格的二维轮廓 投影很容易 挑战在于找到平面中投影三角形边的 外壳 我需要一些有关研究该算法的输入 指针的帮助 为简单起见 我们可以假设
  • 3D 数学:根据“向上”和“向上”正交向量计算倾斜(滚动)角度

    我希望这是提出这个问题的正确位置和这个一样 https stackoverflow com questions 3035590 bank angle from up vector and look at vector 但表示为纯数学而不是图
  • Java俄罗斯方块旋转

    我知道这个问题已经被问了很多 但我想知道如何旋转俄罗斯方块 我已经做了一个又长又糟糕的解决方案 大约 170 行代码 但应该有更简单的方法来做到这一点 我的俄罗斯方块由 4 个块组成 它们都知道它们在矩阵中的位置 行和列 Matrix本身是
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • R 和 Python 中 LU 分解结果不一致

    我有以下矩阵A in R 1 2 3 4 1 1 1527778 0 4444444 0 375 0 3333333 2 0 5555556 1 4888889 0 600 0 3333333 3 0 6250000 0 4000000 1
  • 使用 Scipy/Numpy 在浊点的二维插值中仅获取“有效”点

    我有一个通过人的背部摄影测量获得的浊点 我正在尝试对其进行插值以获得规则网格 为此我正在使用scipy interpolate到目前为止取得了良好的成果 问题是 我正在使用的函数 scipy interpolate griddata 使用平
  • 获取所有矩阵列逐元素乘积对的快速方法

    假设我有一个数字matrix set seed 1 mat lt matrix rnorm 1000 ncol 100 我想生成所有向量 它们是中所有唯一向量对的逐元素乘积的结果mat 我们如何改进下面的代码 all pairs lt t
  • 无法在 Document-Term-Matrix 中看到 `RTextTools::toLower()` 文本的结果

    我尝试创建一个矩阵 为此我想降低文本 为此 我使用此 R 指令 matrix create matrix tweets 1 toLower TRUE language english removeStopwords FALSE remove
  • 沿轴 0 重复 scipy csr 稀疏矩阵

    我想重复 scipy csr 稀疏矩阵的行 但是当我尝试调用 numpy 的重复方法时 它只是将稀疏矩阵视为对象 并且只会将其作为 ndarray 中的对象重复 我浏览了文档 但找不到任何实用程序来重复 scipy csr 稀疏矩阵的行 我

随机推荐

  • 在 Angular dart 中 type() 的另一种方式

    我完成了 Angular dart 教程 但我有一个问题 要声明可用于依赖注入的类型 我必须这样做 class MyAppModule extends Module MyAppModule type RecipeBookController
  • C 中的静态结构初始化

    我有一个struct输入如下图所示 typedef struct position float X float Y float Z float A position typedef struct move position initial
  • Udev 规则不适用于 Ubuntu 12.04 上的 libusb

    我使用的是 Ubuntu 12 04 5 LTS x86 64 我有一个 USB 设备 它使用 libusb 与计算机进行通信 将其插入计算机并运行通信程序后 出现以下错误 libusb couldn t open USB device d
  • 为什么临时对象必须有不同的地址?

    我感兴趣的情况是 const int n1 123 const int n2 123 我知道这就像字面意思一样123是初始化临时的参数int and const只是一个无聊的编译时检查 但我想知道为什么在这种情况下需要不同的临时变量 而不是
  • has_and_belongs_to_many 连接表的 Rails 迁移

    我该如何做script generate migration为 a 创建一个连接表has and belongs to many关系 该应用程序在 Rails 2 3 2 上运行 但我还安装了 Rails 3 0 3 Where class
  • TypeScript + OpenLayers 7:设置和获取功能 ID 失败

    我有一张带有两个自定义按钮的地图 绘制多边形 and 删除功能 它允许我绘制和删除绘制的多边形 此外 我为多边形创建了一个测量叠加 显示了它们的面积 见图 为了识别多边形和覆盖层之间的连接 我尝试在它们上设置相同的 id 以便在删除多边形时
  • 我怎样才能用javascript制作一个简单的wep密钥生成器?

    我正在尝试制作一个 wep 密钥生成器 并且阅读了 wep 密钥的工作原理 但我真的不知道如何开始制作它 任何人都可以给我一个例子或指导我教程吗 我尝试使用谷歌但没有运气 在 JavaScript 中 function generateHe
  • 在 Velocity 模板中按名称引用地图

    很确定这个问题有一个简单的答案 但就是找不到正确的 VTL 语法 在我的上下文中 我传递了一个包含其他地图的地图 我想按名称引用这些内部映射并在我的模板中分配它们 内部地图由应用程序的不同部分构建 然后添加到上下文中 举例来说 public
  • 使用 decltype 的函数参数类型

    注意 这个问题中提供的示例不是生产代码 没有任何意义 它只是为了说明我的问题 我正在测试以下的可能性decltype 特别是如果用它来推导函数参数类型 就会遇到问题 假设有两个类结构如下 struct ClassInt Note no de
  • 如何创建一个在 inputText 和 inputSecret 之间切换的复合组件?

    我正在编写一个 Facelets 复合组件 它根据参数在使用 inputText 和 inputSecret 之间切换
  • “serve”不被识别为运行反应应用程序的内部或外部命令

    serve已使用全局安装npm install g serve命令并且它在本地工作 但部署到Windows服务器给出以下错误 serve 不被识别为内部或外部命令 如何修复这个错误 还有 这个有什么用server js文件在一个react项
  • 从关闭中返回?

    如何从闭包返回而不从包含函数返回 在下面的函数中 return语句实际上返回自GM xmlhttpRequest 不是关闭 当然 我可以看到我可以安排我的代码 以便执行在闭包结束时停止 但我很好奇如何在示例中提前返回 function GM
  • iPhone SDK - 将触摸从 UIViewController 转发到子视图

    我有一个UIViewController其子类为UIView上面叫customSubView1 然后在 customSubView1 上我有另一个子类UIView called customSubView2 当我放置时 我可以捕获所有子视图
  • 违反 MISRA 2012 - 类型不匹配(规则 10.1、10.4)

    我面临着 MISRA C 2012 违规 我无法理解 以下是代码 define I2C CCRH FS uint8 t 0x80 define I2C CCRH DUTY uint8 t 0x40 define I2C CCRH CCR u
  • UIActionSheet 与 swift

    我创建了一个操作表 但问题是没有调用委托方法 myActionSheet UIActionSheet myActionSheet addButtonWithTitle Add event myActionSheet addButtonWit
  • 汇编语言 - masm32 - 乘法

    我将 3 个数字相乘 即使有进位也能很好地工作 我想添加第四个数字来相乘 只是为了学习目的 在我乘以 3 个数字后 我转移到 EDX 并打印 效果很好 在我添加第四个数字后 我认为我正在乘以 32 位 x 32 位 那么它存储到 EDX E
  • 通过接口动态创建类

    我有一些经验 Net Expressions 当我能够动态生成方法时 没关系 很好 但现在我需要生成一个完整的类 似乎唯一的方法就是发出整个IL 这是完全不可接受的 不可能支持 假设我们有以下接口 public interface IFoo
  • 如何以及在哪里处理关联记录的更新过程?

    我正在使用 Ruby on Rails 4 我想通过以下方式正确处理关联记录的更新和创建过程update attributes方法 也就是说 我有以下内容 Model class Article lt ActiveRecord Base h
  • 替换除
     标记之间的换行符之外的换行符                
                

    我正在寻找替换 删除给定字符串中的所有换行符 嵌套在 a 中的换行符除外 pre 标签 因此对于以下字符串 var text Some contents which is formatted over multiple lines but
  • 将 3d 4x4 旋转矩阵转换为 2d

    假设我们有一个 4x4 矩阵 其索引如下 00 01 02 03 10 11 12 13 20 21 22 23 30 31 32 33 如何将该矩阵中包含的旋转数据 忽略 z 轴 如果有帮助的话 转换为单个 2d 旋转角度 以弧度为单位