zoukankan      html  css  js  c++  java
  • 观察矩阵推导

    顾名思义,观察矩阵的作用就是将一个点从世界坐标系转换到观察坐标系,这个点的实际位置并不发生变化。参考上一篇文章,问题就转化成了,假设任意点(vec p),它在世界坐标系(W)下的坐标为((x, y, z)),求在观察坐标系(V)下的坐标((x', y', z'))。套用公式,可得:

    [vec p = x'vec i_V + y'vec j_V + z'vec k_V + vec o_V = xvec i_W + yvec j_W + zvec k_W + vec o_W ]

    其中(o)为坐标系的原点坐标。将上述基向量看作世界坐标系(W)下的向量,可以写成矩阵形式:

    [[x,y,z,1] = [x',y',z', 1] cdot egin{bmatrix} vec i_V & 0 \ vec j_V & 0 \ vec k_V & 0 \ vec o_V & 1 end{bmatrix} ]

    其中,(vec i_V,vec j_V,vec k_V, vec o_V)是观察坐标系(V)的基向量和原点在世界坐标系(W)的表示。一般来说,建立观察矩阵提供的参数是摄像机的世界坐标((Q_x, Q_y, Q_z)),摄像机观察的目标点的世界坐标((T_x, T_y, T_z)),代表世界up方向的向量((U_x, U_y, U_z))。分别求出上面矩阵的各个向量:

    [vec o_V = (Q_x, Q_y, Q_z) ]

    [vec k_V = (T_x - Q_x, T_y - Q_y, T_z - Q_Z) ]

    [vec i_V = vec{up} imes vec k_v ]

    [vec j_v = vec k_v imes vec i_v ]

    注意要将它们进行归一化。归一化之后,可以得到

    [[x',y',z',1] = [x,y,z,1] cdot egin{bmatrix} vec i_V & 0 \ vec j_V & 0 \ vec k_V & 0 \ vec o_V & 1 end{bmatrix}^{-1} \ = [x,y,z,1] cdot (egin{bmatrix} vec i_V & 0 \ vec j_V & 0 \ vec k_V & 0 \ 0 & 1 end{bmatrix} cdot egin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0\ & vec o_V & & 1 end{bmatrix})^{-1} \ = [x,y,z,1] cdot (egin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0\ & -vec o_V & & 1 end{bmatrix} cdot egin{bmatrix} vec i_V & vec j_V & vec k_V & 0 \ 0 & 0 & 0 & 1 end{bmatrix}) \ = [x,y,z,1] cdot egin{bmatrix} i_x & j_x & k_x & 0 \ i_y & j_y & k_y & 0 \ i_z & j_z & k_z & 0\ -vec o_V cdot vec i_V & -vec o_V cdot vec j_V & -vec o_V cdot vec k_V & 1 end{bmatrix} ]

    这就是我们最终要求的观察矩阵。

  • 相关阅读:
    数据库知识整理<二>
    数据库知识整理<一>
    面试经历感悟:
    JDK,J2EE,J2SE,J2ME的概念区别是什么呢?
    HTML与JSP页面的区别
    Java并发编程:深入剖析ThreadLocal
    剖析错误原理并解决Hibernate出现No TransactionManagerLookup specified!错误
    MyEclipse中jar包管理技巧
    String,StringBuffer与StringBuilder的区别??
    POJO / JavaBean / Entity Bean
  • 原文地址:https://www.cnblogs.com/back-to-the-past/p/12245818.html
Copyright © 2011-2022 走看看