【问题标题】:Partial matrix transformation部分矩阵变换
【发布时间】:2016-02-09 10:43:42
【问题描述】:

如果我有一个表示 2d 旋转、平移或缩放(或它们的某种组合)的 3x3 矩阵,是否有办法将其与常数或另一个矩阵相乘以计算部分变换矩阵。

例如,如果我知道矩阵是一个平移矩阵,我可以简单地将 m[0][2]m[1][2] 乘以某个常数(例如 0.25)来创建一个 1/4(m)的平移矩阵。

是否有一种通用方法可以不受矩阵影响?如果没有,是否有单独的方法适用于列出的每种类型(旋转和缩放)。

【问题讨论】:

    标签: matrix transform


    【解决方案1】:

    这与OpenGL 3D transformations 同源。所以是的,只需省略 z 行/列,您就可以用 3x3 矩阵乘积表示 2D 平移、旋转和缩放。

    例如:

    翻译:

    |1  0  Tx| |x|   | x+Tx | 
    |0  1  Ty|*|y| = | y+Ty |
    |0  0  1 | |1|   |  1   |
    

    轮换:

    |cos(w) -sin(w) 0| |x|   | x*cos(w)-y*sin(w) |
    |sin(w)  cos(w) 0|*|y| = | x*sin(w)+y*cos(w) |
    |  0     0      1| |1|   |         1         |
    

    规模:

    |Sx 0  0| |x|   | Sx*x |
    |0  Sy 0|*|y| = | Sy*y |
    |0  0  1| |1|   |   1  |
    

    如果您想组合更多的转换,可以应用更多的转换。假设您有一个缩放操作,S 和一个翻译,T

    现在给定一个向量 v0,您可以对其进行缩放:v1=S * v0

    你可以翻译一下:

    v2=T * v1

    即:

    v2=T * S * v0

    T * S是复合变换

    1. 缩放矢量
    2. 翻译一下

    现在让我们想想以相反顺序执行的转换是什么:S * T

    1. 翻译向量
    2. 缩放它

    请注意,现在缩放也会缩放转换后的坐标 - 与第一种情况不同。

    现在您要求的是转换操作而不是向量的操作。我会尝试这样做:获取向量 v3:

    1. 执行倒刻度操作
    2. 平移反向缩放向量
    3. 缩放它

    这些将产生原始比例的向量,即“缩放平移”的平移。这通常写成:

    v3 = S-1 * T * S * v

    其中S-1逆矩阵S-1 * S = I,单位矩阵)执行相反的操作。

    S-1 * T * S 是您正在寻找的转换。方法很通用。

    【讨论】:

    • 我不确定您是否阅读了这个问题,我知道如何执行转换,我不确定如何获取表示某个转换的矩阵并使其移动 1/距离的 4 或 1/10
    • 我认为编辑解释了如何缩小翻译,但无论如何翻译都很容易缩放,更难缩放的是旋转
    • “缩放旋转”?请解释一下 - 该方法对于运算符和矩阵非常通用,包括旋转。您可以“在旋转后缩放”或之前。但是“缩放旋转” - 根据定义,行列式等于 1 是一个奇怪的概念。
    猜你喜欢
    • 2017-12-22
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多