You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2D变换矩阵乘法顺序咨询:L=S×R×T是否正确?

2D变换矩阵乘法顺序解析

首先明确:矩阵乘法的顺序完全取决于你使用的向量表示方式(列向量/行向量),以及你想要的变换应用逻辑——核心原则是矩阵乘法不满足交换律,顺序错了结果必然不符合预期。

两种常见场景的正确顺序

1. 列向量(主流图形API默认,如OpenGL、Unity)

当使用列向量时,变换通过矩阵左乘向量实现(即 变换后向量 = 矩阵 × 原始向量),运算顺序是从右到左。

如果要实现常规局部变换(先缩放自身 → 再旋转自身 → 最后平移到目标位置),对应的矩阵乘法顺序应为:

最终局部变换矩阵 = T × R × S

其中T=平移矩阵,R=旋转矩阵,S=缩放矩阵。
原因是:(T×R×S) × v = T × (R × (S × v)),实际执行顺序是先缩放向量v,再旋转缩放后的向量,最后平移旋转后的向量,这才是符合直觉的局部变换(缩放、旋转不会干扰平移的偏移量)。

2. 行向量(自定义实现或小众场景)

当使用行向量时,变换通过向量左乘矩阵实现(即 变换后向量 = 原始向量 × 矩阵),运算顺序是从左到右。

同样实现常规局部变换,对应的矩阵乘法顺序就是你提到的:

最终局部变换矩阵 = S × R × T

原因是:v × (S×R×T) = ((v × S) × R) × T,执行顺序是先缩放,再旋转,最后平移,和预期的局部变换逻辑完全匹配。

关于你的疑问

你给出的 L = S × R × T 顺序,仅在行向量场景下是正确的;如果是列向量场景,这个顺序会导致平移先被旋转、再被缩放,最终物体的平移偏移量会被缩放倍数放大,得到完全不符合预期的结果。

其他可能的顺序

如果你的变换逻辑不是常规的「缩放→旋转→平移」,比如需要先旋转再缩放(不推荐,会导致物体沿旋转后的轴缩放,形态扭曲),或者先平移再旋转(相当于绕原点旋转平移后的物体,属于全局变换而非局部变换),那么矩阵顺序也要对应调整:

  • 列向量场景下:先平移再旋转 → R × T
  • 行向量场景下:先平移再旋转 → T × R

但绝大多数局部变换场景,都遵循「缩放→旋转→平移」的逻辑,对应的矩阵顺序根据向量类型选择即可。

内容的提问来源于stack exchange,提问作者Naveen Hedalla Arachchi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:24:22