zoukankan      html  css  js  c++  java
  • 仿射变换

    什么是仿射变换?

    仿射变换定义为一个线性变换加上平移变换。即:

    [g(vec v) = f(vec v) + vec b ]

    仿射变换的矩阵表示

    [g(vec v) = [x, y, z] cdot egin{bmatrix} f(vec i) \ f(vec j) \ f(vec k) end{bmatrix} + vec b ]

    这里,我们要对向量(vec v = (x, y, z))转换为齐次坐标((x,y,z,w)),同样变换后的(g(vec v) = (x', y', z', w))也是齐次坐标。从而有:

    [egin{align*} g(vec v) &= [x, y, z, w] cdot egin{bmatrix} f(vec i) & 0 \ f(vec j) & 0 \ f(vec k) & 0 \ 0 & 0 end{bmatrix} + [x, y, z, w] cdot egin{bmatrix} 0 & 0 \ 0 & 0 \ 0 & 0 \ vec b & 1 end{bmatrix} \ &= [x, y, z, w] cdot egin{bmatrix} f(vec i) & 0 \ f(vec j) & 0 \ f(vec k) & 0 \ vec b & 1 end{bmatrix} end{align*} ]

    对于向量而言,(w)分量为0,因为平移对向量不起作用,对于点而言,(w)分量为1。

    坐标系变换

    在实际运用中经常遇到一个向量或者一个点在不同坐标系下的坐标表示。先来看看向量的情形:

    对于向量(vec v),它在坐标系(A)下的坐标为((x, y, z)),求在坐标系(B)下的坐标((x', y', z'))

    实际上,无论坐标系如何变化,向量自身是不变的,那么我们有:

    [vec v = x'vec i_B + y'vec j_B + z'vec k_B = xvec i_A + yvec j_A + zvec k_A ]

    写成矩阵形式:

    [[x',y',z'] = [x,y,z] cdot egin{bmatrix} vec i_A \ vec j_A \ vec k_A end{bmatrix} ]

    其中,(vec i_A,vec j_A,vec k_A)是坐标系(A)的基向量在坐标系(B)的表示。类似地,反过来也可以得到:

    [[x,y,z] = [x',y',z'] cdot egin{bmatrix} vec i_B \ vec j_B \ vec k_B end{bmatrix} ]

    其中,(vec i_B,vec j_B,vec k_B)是坐标系(B)的基向量在坐标系(A)的表示。这里,可以发现一个有趣的现象:坐标系(A)的基向量在坐标系(B)的矩阵表示乘以坐标系(B)的基向量在坐标系(A)的矩阵表示得到的是单位矩阵。即:

    [egin{bmatrix} vec i_A \ vec j_A \ vec k_A end{bmatrix} cdot egin{bmatrix} vec i_B \ vec j_B \ vec k_B end{bmatrix} = I ]

    我们可以用三角函数的方法去证明它。

    然后我们来看看点的情形。对于点(vec p),它在坐标系(A)下的坐标为((x, y, z)),求在坐标系(B)下的坐标((x', y', z'))。容易知道结果是类似的:

    [vec p = x'vec i_B + y'vec j_B + z'vec k_B + vec o_B = xvec i_A + yvec j_A + zvec k_A + vec o_A ]

    其中(o)为坐标系的原点坐标。写成矩阵形式:

    [[x',y',z', 1] = [x,y,z, 1] cdot egin{bmatrix} vec i_A & 0 \ vec j_A & 0 \ vec k_A & 0 \ vec o_A & 1 end{bmatrix} ]

    其中,(vec i_A,vec j_A,vec k_A, vec o_A)是坐标系(A)的基向量和原点在坐标系(B)的表示。

  • 相关阅读:
    查询mysql哪些表正在被锁状态
    查询mysql哪些表正在被锁状态
    查询mysql哪些表正在被锁状态
    JS模块化工具requirejs教程(二):基本知识
    JS模块化工具requirejs教程(二):基本知识
    JS模块化工具requirejs教程(一):初识requirejs
    sublime的安装与使用
    清除浏览器默认样式——css reset & normalize.css
    webstorm常见快捷方法与遇到的一些问题
    【Git】commit成功后,GitHub贡献图方格没变绿
  • 原文地址:https://www.cnblogs.com/back-to-the-past/p/11854415.html
Copyright © 2011-2022 走看看