3D数学基础 简要归纳

3D数学基础 简要归纳

  • 计算机图形学第一准则:看上去是对的就是对的,简单记为近似原则
  • OpenGL是基于3D的,屏幕是2D的
  • OpenGL中使用的是列向量

左手系&右手系

  • OpenGL更多的是基于左手系
  • 线性代数更多是基于右手系
  • 3D图形学中常用坐标系
    • 世界坐标系:系统的绝对坐标系
    • 物体坐标系:物体产生关联
    • 摄像机坐标系/照相机坐标系
    • 惯性坐标系:物体坐标系转换为世界坐标系的 “半途”,目的是为了减少复杂度,是一个过渡
  • eg:以下情景基于什么坐标系?
    • 书在我的西边还是北边?==> 东南西北 – 世界坐标系
    • 计算机在我的前面还是后面?==> 上下左右 – 物体坐标系
    • 从一个房间移动到另一个房间 ==> 寻路型 – 世界坐标系
    • 你能看见我的计算机吗? ==> 摄像机坐标系

向量

  • 存储 – 数组

  • 图形学中:最多到4维

    • 2D:x、y
    • 3D:x、y、z
    • 4D:x、y、z、w
  • 零向量:没有方向,没有长度 即 模 = 0

  • 负向量 = (-1).向量, 将向量中的每个数都乘以 -1

    • 几何意义:得到一个与原向量大小相等,方向相反的向量
      负向量
  • 向量大小计算 即 模的计算 = 向量中所有数的平方和,再求根号
    向量模计算

    • 2D向量几何意义:直角三角形最长边的边长
      2D向量几何意义
  • 标量与向量的运算总结

    • 标量不能与向量进行加减运算
    • 标量与向量可以相乘,且满足交换律,不需要写乘号
    • 向量可以除以标量,即相当于向量乘以一个标量的倒数 即 v(向量)/k = v 乘以 1/k
    • 标量与向量的乘除 优先级高于 加减
    • 标量不能除以向量,且向量不能除以另一个向量
    • 乘法的特殊情况:负向量,即 向量 乘以 标量-1
    • 几何意义: 以因子(k 即 标量)缩放向量的长度,如果k<0, 向量的方向就会相反
      • 当k = -1时,向量仅翻转,得到大小相等,方向相反的向量
      • 当k = -2时,向量是先翻转,再放大,即-2可以看成(-1)乘以2
  • 向量标准化

    • 向量标准化 = 向量 / 向量的模,且向量 != 0
    • 标准化向量 :是向量长度 = 1,不等于单位向量,单位向量是主对角线数为1,其他全为0,单位向量是标准化向量
  • 向量的加减总结

    • 向量不能与标量或者维度不同的向量相加减
    • 向量加法满足交换律
    • 向量减法不满足交换律,只有当 a=b 时, a-b = b-a
    • 向量加法几何意义:平移向量
  • 向量的距离公式

    • 向量a与向量b的距离公式 = ||b-a|| = b与a对应位置数差的平方和,再求根号
      向量距离公式
    • 几何意义:两点间的距离
  • 向量的点乘总结
    向量点乘

    • 满足交换律,因为点乘结果是一个标量
    • 几何意义:两向量的夹角,即 a · b = |a||b|cosα ==> α = arccos(a·b / |a||b|),当a、b是单位向量时, α = arccos(a·b)
a·b 夹角α a和b
> 0 (0°,90°) 方向基本相同
= 0 90° 正交
<0 (90°,108°) 方向基本相反
  • 根据已知的向量v和向量n,且v2平行于n,v1垂直于n,求向量v2和向量v1
    image

    • v2平行于n: v2 = n(|v2| / |n|)
    • cosα = |v2| / |v| ==> |v2| = cosα·|v|
    • 将|v2|代入v2 ==> v2 = n(cosα·|v| / |n|)
    • 分子分母同时乘以|n| ==> v2 = n(cosα·|v|·|n| / |n|²)
    • 根据a · b = |a||b|cosα ==> v2 = n(v·n / |n|²),此时求得v2
    • 根据v2求v1,因为v1 + v2 = |v| ==> v1 = |v| - v2
    • 将v2公式代入v1 ==> v1 = |v| - n(v·n / |n|²)
  • 向量叉乘总结【常用】

    • 向量叉乘运算规则如下
      向量叉乘
    • 向量的叉乘优先级高于点乘
    • 几何意义
      • a × b = c,c垂直于a和b构成的平面,即c是该平面的法线,分别与a,b都垂直
      • a × b = c,即|c| = |a||b|cosα
    • 叉乘既不满足交换律,也不满足结合律
    • 任何向量与自己叉乘等于零向量,即 向量a × 向量a = 0
      image

矩阵

  • 矩阵在OpenGL中推荐使用一维数组存储

  • 方阵:行=列的矩阵

  • 向量可以当做1*n(行向量) / n*1(列向量)的矩阵使用

  • 标量和矩阵的乘法:将矩阵中的每个数都乘以标量

  • 矩阵与矩阵相乘,即 A₃*₂ * B₂*₄ = C₃*₄,A的列数必须匹配B的行数(记法图示如下)
    矩阵相乘

  • 矩阵乘法总结

    • 当S是单位矩阵且乘法有意义,任意矩阵M乘以方阵S,,那么得到的结果就是原矩阵,即MI = IM = M
    • 矩阵乘法不满足交换律,即AB != BA
    • 矩阵乘法满足结合律,前提是ABC的维数使其乘法有意义,即 (AB)C = A(BC)
    • 矩阵乘法也满足与标量/向量的结合律,即(kA)B = k(AB) = A(kB); (vA)B = v(AB)
    • 矩阵乘积的转置 相当于 先转置矩阵,然后以相反顺序相乘,即(AB)ᵀ = BᵀAᵀ
  • 向量与矩阵乘法总结

    • 行向量左乘矩阵,结果是行向量
    • 列向量右乘矩阵,结果实列向量
    • 结果向量中每个元素都是原向量与矩阵中单独行/列的点积
    • 矩阵-向量成法满足对向量加法的分配律,即 (v+w)M = vM + wM,其中v,w是向量,M是矩阵
  • 基向量:单位向量

    • p、q、r 定义分别指向+x,+y,+z⽅方向的单位向量量,v = xp+yq+zr
      基向量

    • 矩阵M对应到坐标轴的单位向量如图所示
      image

    • 矩阵的每一行都能解释为转换后的基向量

  • 矩阵的几何意义

    • 方阵的行能被解释为坐标的基向量
    • 为了将向量从原坐标变换到新坐标,需要用向量乘以一个矩阵
    • 线性变换:从原坐标系到基向量定义的新坐标系的变化
    • 零向量乘以任何矩阵仍是零向量

2D下的旋转矩阵公式推演

核心动画CoreAnimation中苹果官方文档有提到

  • 2D下的旋转时围绕原心旋转的

  • 三角函数表

三角函数/角度 0(0°) π/2(90°) π(180°) 3π/2(270°) 2π(360°)
sinα 0 1 0 -1 0
cosα 1 0 -1 0 1
tanα 0 不存在 0 不存在 0
cotα 不存在 0 不存在 0 不存在

旋转时向量的变化与三角函数值的关系

  • 旋转变化如图所示
    2D-围绕原点旋转变化过程

  • 向量与三角函数值的关系
    基向量与三角函数值关系

3D下的旋转矩阵公式推演

  • 3D下的旋转时围绕某个轴旋转的,当围绕哪个轴,哪个轴的矩阵中所对应的行和列就用基向量表示

    • 围绕x轴旋转,x轴不会发生变化,所以x对应的矩阵行用基向量表示,图示如下

    • q向量的值变化过程为: +y(起始) ==> +z ==> -y ==> -z
      1 0 0
      0 0 1
      0 1 0
      0 0 -1
      0 -1 0

    • r向量的值变化过程:+z(起始) ==> -y ==> -z ==> +y
      0 0 1
      0 -1 0
      0 0 -1
      0 1 0

    p、r变化过程图示为
    3D-围绕x旋转变化过程

    与三角函数的关系如图所示
    image

  • 围绕Y、围绕Z与围绕x类似

    • 围绕Y轴时R的矩阵:010表示的是基向量,围绕谁懂,谁就必须由基向量表示
      围绕Y旋转
    • 围绕Y轴时R的矩阵:001表示的是基向量
      围绕z旋转

缩放与平移矩阵公式推演

  • 2D缩放:基向量p和q分别乘以标量k
  • 平移:在哪个轴平移,将这个轴的对应的值与平移距离相加

猜你喜欢

转载自blog.csdn.net/lin1109221208/article/details/107639968