DirectX12 3D龙书(1线性代数)

向量代数

  1. 为什么用向量,而不用坐标点(标量)表示位置?因为向量有大小,方向,不仅有更多的操作,而且除了表示位置,还可以表示力(物理),方向(视角,攻击,光线,多边形……),位移,速度……
  2. 注意:向量仅有两个属性,只要大小和方向相同,那么向量就是相同的,位移不影响向量的属性
  3. 为什么引入坐标系?因为计算机无法直接处理向量,需要2d | 3d的坐标-系
  4. 向量和坐标系:将向量的起点移到坐标原点,因而可以确定向量v(x,y,z)
  5. directX采用左手坐标系,与opengl右手坐标系不同,意味着z轴的正方向相反
  6. //
  7. 正交投影:
  8. 一个向量v可以分解为两个互相正交的向量,为向量加法的逆运算
  9. proj n(v):v在n上的投影,n为单位向量(仅考虑方向),那么投影的大小p:
  10. p = kn = k; k = ||v|| cos\theta ;所以 p = ||v ||cos\theta n = (||v|| ||n|| cos\theta)n  = (v n)n
  11. prep n(v) :v在n上投影的正交分量,:向量 w = v - p; w + p = v;
  12. //
  13. 规范正交:如果向量集每个向量都相互正交,且都为单位向量,则集合为规范正交
  14. 正交化:将非规范正交,变为正交
  15. 2D:向量v0平行n轴,使v正交化:v - proj n (v):向量v - v在n上投影 = 向量相减 = prep n(v)
  16. 3D:向量可能依次减去多个方向的投影

矩阵代数 

  1. 余子式:A为n*n的矩阵,- 上标Aij,表示去除i行j列的(n-1)(n-1)矩阵
  2. 行列式:detA(A的行列式) = n\sum f=1 (求和) Aij (某元素) (-1)^i + f (符号)   det -上标Aij(余子式的行列式)
  3. Aij元素的代数余子式Cij:(-1)i+j(符号)  det -上标Aij(余子式的行列式):
  4. 代数余子式矩阵CA:右Cij构成的矩阵
  5. 伴随矩阵A^*:CA^T 矩阵的转置矩阵
  6. 逆矩阵A^-1:几何意义为矩阵除法(倒数),A^* / detA
  7. //
  8. 线性组合:
  9. 向量 * 矩阵 :可以写为线性的形式:行向量 * 矩阵的每一列,移项后,u A = xA1. + yA2. + zA3. (这里 n. 表示第n行),相当于向量u的标量系数,和矩阵A的每行线性组合

变换

  1. 线性变换:
  2. 输入输出都是向量, 且满足如下两个性质,则T为线性变换
  3. T(u + v)  = T(u) + T(V);  T(ku) = k T(u) ;k为标量
  4. 线性性质推论:T(au,bv,cw) = T(au + (bv + cw)) = aT(u) = T(bv + cw) = aT(u) + bT(v) + cT(w)
  5. //
  6. 矩阵表示法
  7. T(u)如何用矩阵表示?填入ijk标准基向量:坐标轴的3个单位向量
  8. 根据线性变换性质:T(xi+yj+zk) = xT(i) + yT(j) + zT(k),根据线性组合可以推导为矩阵A的形式
  9. //
  10. 缩放:
  11. 证明S变换为线性变换:通过带入两个性质,符合等式
  12. 计算缩放矩阵:根据矩阵表示法,我们已经知道了S(T),和ijk,:S(i) ,S(j) S(k)……
  13. //
  14. 旋转:
  15. 对于想要计算v绕n旋转\theta后的 Rn(v)向量,我们首先表示proj n(v)的投影,和v^T = prep n(v) = v - proj n(v) 正交于n的投影,并且发现,只有v^T被v的旋转影响,而另一个投影分量不变化
  16. 接着表示v^T 和 proj n(v)的叉积,可以获得正交于两个向量的第3个向量 n * v^T = ||n|| ||v^T||sina(a为n与v^T的夹角 = 90) =  v^T,
  17. 最后表示 Rn(v)和轴n的连线,Rn(v^T) ,因为在一个圆周Rn(v^T)的长度 = v^T的长度,上条的叉积也==v^T,3个向量长度相等,Rn(v^T) = cos\thetav^T +  sin\theta(n*v)
  18. Rn(v) = proj n(v) + Rn(v^T)
  19. 计算旋转矩阵:……需要根据上述公式推导旋转矩阵Rn(\theta),包括单位矩阵,反对称矩阵等
  20. 计算了Rn(\theta),可以通过控制n向量的方向,带入旋转矩阵的n(x,y,z)中,从而获得以x轴或y轴或z轴旋转的旋转矩阵
  21. 旋转矩阵的行向量都是规范正交的,则逆矩阵和转置矩阵相同
  22. //
  23. 放射变换
  24. 线性变换T(u) + 平移变换b
  25. 矩阵表示法:v(x.y,z) A(3*3) b(x,y,z)
  26. 对于顶点,引入了齐次坐标w,因为我们知道向量没有位置的概念,所以平移仅适用于点(x,y,z,1),而向量表示为(x,y,z,0)
  27. 如果引入w表示仿射变换:v(x.y,z) A(4*4)
  28. //
  29. 平移
  30. 恒等变换:直接返回输入参数的线性变换,
  31. 对于仿射变换中的T(u)就是恒等变换
  32. 我们可以直接用仿射变换表示旋转和缩放矩阵,方法使b=0
  33. 刚体变换:保形变换,保长性,保角性,可以用仿射变换表示
  34. //
  35. 复合变换:
  36. SRT:缩放旋转位移,注意顺序不能变
  37. //
  38. 向量坐标转换:
  39. 向量p位于标架A中,如何求出在标架B中对于的p坐标呢?
  40. 2D:如果知道pA(x,y),并且知道uv(即A的坐标系),在B标架中对应的坐标向量,则pB = xub + yvb,
  41. 这种推导:将p分解为xy的两个正交投影,分别*ub ,vb变换到B空间的向量方向(标量*向量 的方向为向量方向),这样p就可以由两个分量获得,两个正交投影向量的加法,为p向量
  42. 3D同理:pB = xub + yvb + zwb
  43. 点的坐标转换:
  44. 点和向量有区别,点有位置属性,必须考虑到它的位移
  45. pB = xub + yvb + zwb + Q(Q为uvw的原点,即需要相对于Q的点,+Q的偏移量)

DirectXMath库

  1. 包含向量,矩阵,变换……操作的API库,
  2. 略……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值