计算几何复习要点

 1、向量加法的几何含意:

  a+b的释意为:a的尾连上b的头,新建一条从a的尾指向b的头的向量。

 2、向量减法的几何含意:

  a-b的释意为:尾部相连,新建一个从b的头指向a的头的向量。

 3、点积,内积:

  对于向量a(Xa,Ya)、向量b(Xb,Yb),a与b的点积为:Xa*Xb+Ya*Yb。

  另外 a*b=|a|*|b|*cos(a与b夹角)。通过此公式可通过坐标来计算2向量夹角。

 4、叉积。注意,axb 的结果是一个向量。

  |aXb| = |a|*|b|*sin(a与b夹角)。几何函数为a向量与b向量组成的面积。

 5、行数和列数相同的矩阵称为方阵。所有非对角线元素都为0的矩阵为对角矩阵。

 6、转置矩阵意味着把矩阵给转换。

参考自《3D数学基础:图像与游戏开发》

3D数学基础

1、研究自然数、整数的领域称为离散数学。研究实数的领域称作连续数学

2、计算机图形学第一准则:近似原则 。如果它看上去是对的,它就是对的。

3、常见坐标系。

  1)世界坐标系。

  2)物体坐标系。

  3)摄像机坐标系。

  4)惯性坐标系。

4、向量的大小。

  

5、点积:对应分量的和。

  

  点积可以计算向量的夹角:

  

6、假设有向量v,n,则v可以拆分平行为n的向量 v1、以及垂直于n的向量v2。

  

  v1 = |v1|*n / |n| = |v| cos0 *n / |n| = |v||n|cos0*n / |n|^2 = dot(v,n)*n/|n|^2

  

  上术计算 v1 的公式,可以略去 cos0 的计算。

  有了v1,v2就很好求了。 v2 = v - v1

  

7、叉乘公式。

  

  叉乘不满足交换律,即: axb != bxa。但满足反交换律:

    

  也不满足结合律:

    

  叉乘满足分配律:
    

  

8、矩阵是 row x column,如下面是一个 4x3 的矩阵。

  

9、两个矩阵积的转置 等于 转置的逆序积。
  

10、行向量左乘矩阵,结果是行向量;行向量右乘矩阵,结果是无定义。

  列向量左乘矩阵,结果是无定义;列向量右乘矩阵,结果是列矩阵。

  并且注意,行向量、列向量的值完全不同。

  

11、若把矩阵的行解释为基向量,那么乘以该矩阵就相当于执行了一次坐标转换。若有 aM = b,我们就可以说,M可以将a转换到b。

  

  

12、绕x、y、z 轴旋转 0度。

  

  记法诀窍:

  1、斜角都是 cos0。

  2、固定轴的下一个是 sin0。

  3、固定轴的下下一个是 -sin0。

13、沿坐标轴的绽放矩阵。

  

14、切变,切变后面积、体积不变。也被称作扭曲变换。以下是 2d切变矩阵:

  

  以下是3D切变矩阵。

  

15、线性变换。满足加法、线性乘,那么叫线性变换。

  

  

16、2 维行列式

  

  3维行列式:

  

  如果将矩阵解释为 abc 向量,那么矩阵的行列式可以写为:

  

17、M{i,j} 称为 M的i行j列的余子式,意为去除i行j列后余下的矩阵。

  

  加上-/+后称为代数余子式。

  

  

  任一一行的代数余子式与元素乘积的和,即为行列式,所以这里得到行列式的另一个计算方法:

  

  

18、矩阵行列式的特性。

  

19、2D中,行列式的值为基向量围成图形的面积。

  

  3D中,行列式等于基向量的体积。

20、如果一个矩阵有逆矩阵,则称它为可逆的或非奇异的(非单身)。如果没有逆矩阵,则为不可逆,奇异。

  奇异矩阵的行列式为零,非奇异的行列式不为零。因为逆矩阵的计算需要除以行列式 |M|。

21、adj M 是标准伴随矩阵,是代数余子式矩阵的转置。

  

  

  

  逆矩阵的计算公式:
  

  逆矩阵的特性:

  

  

22、正交矩阵:M*M^T=I

  如果一个矩阵是正交的,那么它的转置等于它的逆: M^-1 = M^T。

  这是快速计算逆矩阵的一种常用方法。

23、正交矩阵性质的推导。

  

  

23.1、3D矩阵的施密特正交化。

    

  施密特正交化是有偏差的,一个例子是rq总是不变的。一个改进的算法是,选择一个小因子,迭代N次。

    

24、3D 平移矩阵。

  

24.1、一般仿射变换。

  

25、投影的计算。

    

26、

27、

28、

29、

3D中绕任意轴的旋转

  假设旋转轴通过原点,为n,旋转的角度为0。被旋转轴为 v,旋转后的轴为 v'。则我们需要找到的旋转矩阵R为:

    

  先构造空间,可以将 v 拆分为 v1、v2,v1平行n,v2垂直n。

      

    下面的等式可由两种方式得到:

    1)0 的旋转矩阵。

    2)水平分量、垂直分量相加。

    

    

  将 [1,0,0]、[0,1,0]、[0,0,1] 代入,即可得三个旋转后的坐标轴。

  

  综合在一起,可得旋转矩阵:

    

沿任意方向缩放

  现在来解决,沿方向n,绽放k倍的问题。假设需要绽放轴 v,那么v可拆分为v1,v2。v1平行于 n,v2 垂直于n。

    

  

  上式中,(VN)N 为 V||,再乘上 (k-1),所以此公式的含意为给 V 加一个 (k-1)V|| 的偏移。

  所以,三个轴旋转后分别为:

    

  绽放矩阵为:

    

  有了上述公式后,可轻易的得出绕任意平面投影的矩阵:

      

  同样,镜像矩阵也很容易得出:

     

3D数学基础 KeyNote 1的更多相关文章

  1. 3D数学基础:四元数与欧拉角之间的转换

    在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点.本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 单位四元数可视化为三维矢量加上第四 ...

  2. 3D Math Keynote 4

    [3D Math Keynote 4] 1.三角带. 合并三角带能够提升渲染效率. 三角扇. 2.边缩坍,将边缩减为顶点 . 网格消减,使用边缩坍,可以实现渐进式网络. 3.下图左边是面拆分.右边是焊 ...

  3. 3D Math Keynote 3

    [3D Math Keynote 3] 1.球的表面积 Surface.球的体积 Volumn: 2.当物体旋转后,如果通过变换后的旧AABB来顶点来计算新的AABB顶点,则生成的新AABB可能比实际 ...

  4. 3D Math Keynote 2

    [3D Math Keynote 2] 1.方向(diretion),指的是前方朝向.方位(orientation),指的是head.pitch.roll. 2.欧拉角的缺点: 1)给定方位的表达式不 ...

  5. 【Unity3d游戏开发】Unity3D中的3D数学基础---向量

    向量是2D.3D数学研究的标准工具,在3D游戏中向量是基础.因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要.在本篇博客中,马三就来和大家一起回顾和学习一下Unity3D中那些常用的3 ...

  6. 3D数学基础(四)四元数和欧拉角

    一.四元数 四元数本质上是个高阶复数,可视为复数的扩展,表达式为y=a+bi+cj+dk.在说矩阵旋转的时候提到了它,当然四元数在Unity里面主要作用也在于此.在Unity编辑器中的Transfor ...

  7. 3D数学基础(三)矩阵

    3D引擎中对于矩阵的使用非常多,介绍这些知识也是为了告诉开发者原理,更有助于开发者编写逻辑. (1)固定流水线 各种坐标系之间的转化是通过矩阵相乘得到的,这里面就涉及到了3D固定流水线.作为3D游戏开 ...

  8. 3D数学基础(二)向量

    向量的基本运算包括加法.减法.点乘.叉乘.单位化运算等,而在游戏开发中使用最为广泛的是减法.点乘.叉乘.单位化运算.向量是具有方向和长度的矢量,有2D.3D.4D等的.在游戏开发里面一般使用的是2D和 ...

  9. 3D数学基础(一)Unity坐标系

    Unity引擎时非常成熟的,引擎内部运用了很多的数学知识,他对开发者来说是不可见的,而且他已经封装好的算法也不是很全面.此外,要是使用引擎封装好的算法也要明白其实现的原理. 写过一些代码,也参考了一些 ...

随机推荐

  1. 随机生成国内ip

    function rand_ip(){ $ip_long = array( array('607649792', '608174079'), //36.56.0.0-36.63.255.255 arr ...

  2. [MEF]第01篇 MEF使用入门

    一.演示概述 此演示初步介绍了MEF的基本使用,包括对MEF中的Export.Import和Catalog做了初步的介绍,并通过一个具体的Demo来展示MEF是如何实现高内聚.低耦合和高扩展性的软件架 ...

  3. ballerina 学习九 Client endpoints

    说白了就是连接外部服务的,可以是http jms websocket .... 简单例子 代码 import ballerina/http; import ballerina/log; endpoin ...

  4. 服务器用 git 进行部署出现代码冲突的处理

    服务器用 git 进行部署出现代码冲突的处理 起因: 由于项目是之前很久之前上传的,且并没上线.使用 git pull 进行代码更新时出现很多冲突. 因为服务器上的代码有移动过位置,不知道为什么就冲突 ...

  5. [LeetCode系列] 二叉树最大深度求解问题(C++递归解法)

    问: 给定二叉树, 如何计算二叉树最大深度? 算法描述如下: 如果当前节点为空, 返回0(代表此节点下方最大节点数为0) 如果当前节点不为空, 返回(其左子树和右子树下方最大节点数中的最大值+1) 上 ...

  6. tar 打包处理文件

    基本格式:tar [Options] file_archive //注意tar的第一参数必须为命令选项,即不能直接接待处理文件 Option是由三部分组成,分别是操作类型(创建,查看,解压),压缩处理 ...

  7. (转)Android DiskLruCache完全解析,硬盘缓存的最佳方案

    摘自:http://blog.csdn.net/guolin_blog/article/details/28863651 转载请注明出处: http://blog.csdn.net/guolin_bl ...

  8. Android的AsyncQueryHandler详解

    摘抄别人的博客,看一下,里面有AsyncQueryHandler的详细介绍.http://blog.csdn.net/yuzhiboyi/article/details/8093408 自从frame ...

  9. Cannot read property 'setState' of undefined

    You're using function() in your Promise chain, this will change the scope for this. If you're using ...

  10. python 面向对象(其他相关)

    python 面向对象(其他相关): (思维导图    ↑↑↑↑↑↑) 一.issubclass(obj,cls) 检查obj是否是类cls的对象 class Base(object): pass c ...