应用于 3D 点的 2D 旋转矩阵

Posted

技术标签:

【中文标题】应用于 3D 点的 2D 旋转矩阵【英文标题】:2D rotation matrix applied on 3D points 【发布时间】:2015-12-18 10:56:54 【问题描述】:

我有旋转矩阵、平移向量和一组 3D 分类点(类别取决于 z 坐标)。 一个 2x2 的旋转矩阵 M 和一个 2x1 的平移向量 T 与一个类别相关。

如何在坐标 (x, y, z) 的每个点上应用我的旋转和平移矩阵? 是单纯的还是我误解了旋转矩阵的原理?

add to M a column and a line of 0 
add to T a 0 for the z-transformation
then : (x, y, z) = M * (xp, yp, zp) + T

【问题讨论】:

【参考方案1】:

如果我对您的理解正确,您在 R^2 上进行了仿射变换,并且您希望将其提升到 R^3 上的仿射变换,以便将其应用于 (x,y,z) 时的效果是应用原始转换为(x,y) 并保持z 不变。

如果是这样 - 你必须更仔细地修改你的矩阵。

如果你的原始矩阵是

M =  [a  b]
     [c  d]

那么你的新矩阵应该是

M' = [a  b  0]
     [c  d  0]
     [0  0  1]

请注意右下角的 1 - 它是您描述的方法中缺少的成分。请注意,添加的行和列是 3x3 单位矩阵的第三行和第三列,这是有道理的,因为您希望结果类似于z 上的单位矩阵。这很容易解决

[a  b  0]   [x]    [ax+by]
[c  d  0]   [y]  = [cx+dy]
[0  0  1]   [z]    [  z  ]

这就是我认为你想要的。 (我不认为 Stack Overflow 对矩阵有任何标记,但我的符号应该足够清楚)

您正在正确处理T(添加零 z 分量)。

【讨论】:

以上是关于应用于 3D 点的 2D 旋转矩阵的主要内容,如果未能解决你的问题,请参考以下文章

[3D数学]矩阵 2017.8.16

《Unity3D 实战核心技术详解》书中关于矩阵的错误

GLSL 2D 旋转矩阵无法按预期工作

需要一种从大量 3D 坐标中绘制平面的有效方法

3d 矩阵旋转 - 对象奇怪地旋转

不支持 Simulink 中可以是 2D 的 3D 矩阵