zoukankan      html  css  js  c++  java
  • 3D数学基础No.1

       

    Part 1 最基础的部分:

      3D世界中的点和方向多用一个4D向量表示,前三个向量是XYZ,第四个分量是W.

      第四个分量的引入有两个作用:一是为了区分向量和点。二是为了进行变换。

      W=1表示点,可以平移。

      W=0表示向量,平移对其不起作用。因为它只是用来表示方向的。

      3D中常用的变换多是用矩阵和向量相乘来实现,和4D向量相乘,所需要的变换矩阵是4×4的形式,可以实现平移、旋转、缩放。

      因为图形API的不同,向量和矩阵的形式会对应不同。

      DirectX使用行向量行向量左乘矩阵得到行向量。转换顺序是从左往右发生:vABC,表示v向量先进行A转换,再B,再C.

      OpenGL使用列向量,列向量右乘矩阵得到列向量。转换时从右往左:CBAv。

     

    Part2 转换矩阵讨论

    线性代数基础:

      首先弄清楚线性代数中的几个概念:

      转置矩阵一个矩阵的转置矩阵就是将这个矩阵的行列交换。

      逆矩阵一个矩阵乘以它的逆矩阵得到单位矩阵。

      正交矩阵若一个矩阵的转置矩阵就是它的逆矩阵,那么这个矩阵就是正交矩阵。

     

      转换矩阵包含了平移、旋转、缩放。

      一个矩阵可以单纯地表示一种变换,如只表示平移,可以将它称为平移矩阵。

      矩阵也可以同时表达多种变换,如将平移矩阵和旋转矩阵相乘就可以得到先平移后旋转的矩阵。注意矩阵相乘的顺序很重要,交换顺序后得到的结果不同。

     

      根据逆矩阵的性质可以知道,逆矩阵表达的是相反的变换,乘以变换矩阵后再乘以逆矩阵等于总体乘以了一个单位矩阵。

     

      平移矩阵的逆矩阵可以直接将平移参数取负。(前后加减平移参数得0)。

      缩放矩阵的逆矩阵就是将对角线上的三个缩放参数取自身的倒数。(前后相乘缩放参数得1)。

      旋转矩阵的逆矩阵可以将旋转的角度参数取负,表示再转过相反的角度。

      可以发现只有旋转矩阵的逆矩阵是转置得到的,所以只有旋转矩阵是正交矩阵。

  • 相关阅读:
    Codeforces 1062
    HDU 1247
    力扣 7. 整数反转
    力扣 3. 无重复字符的最长子串
    力扣1. 两数之和
    力扣 78.子集
    C++编译时报错“count”符号不明确
    Java邻接矩阵存储图简易版以及深度优先优先遍历和广度优先遍历
    word中超链接显示成{HYPERLINK "url"}形式的解决方案
    Hadoop在window上运行出现:java.io.IOException: (null) entry in command string: null chmod 0644
  • 原文地址:https://www.cnblogs.com/mengdd/p/2598026.html
Copyright © 2011-2022 走看看