3D Math Keynote 3

1、球的表面积 Surface、球的体积 Volumn:

  

2、当物体旋转后,如果通过变换后的旧AABB来顶点来计算新的AABB顶点,则生成的新AABB可能比实际的新AABB大一些。

  

  由 旧AABB 快速计算 新AABB的方法。

  

  如果 m < 0,则取min值参与计算,如果 m > 0,则取max值参与计算。

3、多于3个点的最佳平面。算法就是求出所有的n,然后求个平均值。(此公式书中未给出证明过程)

  

  使用求和符号,能使公式更简洁一些。

  

  最佳d值为:

  

4、点到平面的距离。比如平面外有一点q,求q到平面的距离。

  

  

5、三角形的正弦、余弦公式。

  

  

  海伦公式,让我们可以使用三边长度,计算出面积:

    

6、根据三个顶点坐标,快速计算三角形面积。

  顺时针,依次每条边与x轴围成的面积。

    

  A(e1) + A(e2) + A(e3) 即是三角形面积。

  

  可以看到如果将三角形下移h高度,使得三角形与X轴穿叉,面积实际上不会变。

  A(e1) = (y3+y2-h)(x3-x2)/2,将-h提取出来,得到 -hx3+hx2

  A(e2) = (y1+y3-h)(x1-x3)/2,将-h提取出来,得到 -hx1+hx3

  A(e3) = (y2+y1-h)(x2-x1)/2,将-h提取出来,得到 -hx2+hx1

  可以看到,上面三个A中新增出来的项,刚好相互抵消。所以即使三角形与X轴相互穿叉,上述算法也能得到正确的面积。

  最后,最简单的方法实际是计算叉积,叉积即是面积。

  

7、三角形局部坐标,通常可以使用重心坐标。

  

    

  每个顶点对应的边上的每一个点的对应分量为0。

  

  重心坐标不同于笛卡尔坐标,笛卡尔有2个维度的变量,重点坐标却有3个维度的变化。由于 b1+b2+b3=1,所以实际上,在重心坐标系下,只要两个维度就能惟一确定一个位置。

8、给定 v1,v2,v3和p,计算 p 的重心坐标。

    

  

  重心坐标实际是面积比。

  

9、计算3D中任意点的重心坐标。

  一种算法是通过抛弃 x,y,z 中的一个分量,将3D问题转化到 2D 中。

  但存在一个问题,如果投影后三点或两点共线怎么办。一种解决方法是,挑选投影面积最大的那一面来计算。实际计算方法就是,抛弃法向量中分量最大的那一个轴。

  

  另一种算法是使用公式 12.23 中的面积比法,计算p点与各边围成的面积,求出比例。

10、重心或质心。

  

  内心是指到三角形各边相等的点。之所以称之为内心,是因为它是三角形内切圆的圆心。内心是角平分线的交点。

  

  

  外心是到三角形各顶点距离相等的点,是三角形外接圆的圆心。

  

    

    

11、简单多边形不包含洞,复杂多边形可能包含洞。

  凸多边形任意两点连续均在图形内,凹多边形有可能在图形外。怎样才能知道一个多边形是凹的还是凸的?一种方法是检查n个顶点的较小角的和(解决凹多边形的问题), 是否为 (n-2)*180。

  

  凸多边形的补角和为 360 度。

  另一个检测凹凸多边形的方法是每一个点的转身,用叉乘来做。

12、点距直线的最接近点。

    

13、点距射线的最接近点。

    

14、点到平面的最接近点。与12中的点到直接的最接近点公式一样,只是多了一维。

  

15、点到圆或球的最接近点。

    

16、计算AABB上的最接近点。
  算法是按一定顺序,沿着每条轴将 q 推 B。

  

  

17、2D 中隐式直接相交性检测。

  

18、3D中两条射线的相交检测。

  

  

19、射线和平面的相交性检测。

    

  上述公式是通过代数的方程的方法来解。  

  根据公式,可以提供另一种理解方法。 d-p0*n 其实是 p0到平面的距离,d*n其实是d与n平行的分向量。总距离除以向量步行,即可得到t的值。

20、AABB和平面的相交性检测。

  

  动态检测:

    

21、三平面相交性检测。算法与2D中两直线相交性检测类似,解方程。

    

22、射线和圆、球的相交性检测。

  

  上图中 a可以通过 e到射线的投影计算出来。

  

  b 可以通过 e、a求出来。

  

  f 可以通过 r、b求出来。

  

  t 可以通过 a、f求出来。

  

23、两个圆球的相交性检测。

  两个运动的球需要通过相对运动来计算。

    

  通过相对运动,将问题转化成了如下模型:

  

  根据 cos 定理,有如下公式:

  

   

24、球和AABB的相交性检测。

  选择 min/ max,取一个最小 magnitude, 看是否小于距离。

25、球和平面的相交性检测。

  计算圆心到平面的距离,看是否小于r。

  

  如果圆在运行中,如何求解t为何值时与平面碰撞?

  

  问题转化成了点到平面的距离。

  

26、射线和三角形的相交性检测。

  第一步,计算射线到三角形平面的交点。第二步,通过计算交点的重心主坐标,来判断它是否在三角形中。

27、射线和AABB的相交性检测。

  书中未详细说明算法。

28、两个AABB的相交性检测。

  检测两个AABB是否相交非常简单,只要在每一维上检查它们的重合度即可。如果所有维上都没有重合,那么这两个AABB就不会相交。

  动态情况麻烦一点,如果向某方向以d运行,求t时刻相遇。t为所有维上同时重合的第一个点。

  

  所有时间区间的交集,就是两个边界框相交的时间段。

  

29、

30、

31、

32、

33、

3D Math Keynote 3的更多相关文章

  1. 3D Math Keynote 4

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

  2. 3D Math Keynote 2

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

  3. 3D Math Keynote

    [3DMathKeynote] 1.常用公式. 1)(A*B)^T = B^T*A^T.   2)(A*B)^-1 = B^-1*A^-1. 3)|A*B| = |A|*|B|. 4)|M^T|=|M ...

  4. 《3D Math Primer for Graphics and Game Development》读书笔记2

    <3D Math Primer for Graphics and Game Development>读书笔记2 上一篇得到了"矩阵等价于变换后的基向量"这一结论. 本篇 ...

  5. 《3D Math Primer for Graphics and Game Development》读书笔记1

    <3D Math Primer for Graphics and Game Development>读书笔记1 本文是<3D Math Primer for Graphics and ...

  6. 3D Math Library的姿势

    http://www.opentk.com/doc/math http://www.gamedev.net/topic/484756-fast-vector-math-library-for-net/ ...

  7. 3D math primer for graphics and game development

    三角网格(Triangle Mesh) 最简单的情形,多边形网格不过是一个多边形列表:三角网格就是全部由三角形组成的多边形网格.多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑 ...

  8. 3D数学基础 KeyNote 1

    [计算几何复习要点] 1.向量加法的几何含意: a+b的释意为:a的尾连上b的头,新建一条从a的尾指向b的头的向量. 2.向量减法的几何含意: a-b的释意为:尾部相连,新建一个从b的头指向a的头的向 ...

  9. 3D数学学习笔记——笛卡尔坐标系

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...

随机推荐

  1. windows使用ruby配置redis集群

    基本是从网上抄的.不过网上的东西不一定是完全正确的 我修正了一下 首先,资源有限,我就不搞什么主机从机了,我需要的集群实现内存的最大化 四台机器安装redis, 配置成服务, 打开6379端口,集群1 ...

  2. lnmp环境 swoole聊天室

    pecl install swoole 安装php扩展swooleservice php-fpm restart 重启php服务whereis php.ini 查看php.ini的位置 查看文件是否配 ...

  3. webstorm的相关操作

    1.webstorm修改tab键的缩进

  4. nexus3.14.0版本linux环境安装、启动、搭建私库

    本文介绍的是nexus3.14.0版本在linux环境下安装.启动.搭建私库. nexus3以上的版本太新了,网上很少介绍安装细节的.据了解和2.X版本有所不同了. 1.前提 linux机器上需先安装 ...

  5. xamarin android 开发

    开始环境vs2017 直接创建android 项目,左边是android studio 的项目目录  右边是vs创建的android 项目目录 结构基本相同,有res对应的Resources文件 加载 ...

  6. vb程序安装时需要在客户端安装MSSOAP30.dll,但注册不上,请问怎么处理

    現在想打包发布,在客戶沒有這個控件時,注冊一下,主要是不想在客户机器上安装SoapToolkit30.EXE文件 ?? 推荐解决方案 如果使用 InstallShield 工具来打包,安装完MSSOA ...

  7. mybatis逆向工程没有报错,但是也没有pojo和Mapper文件问题

    如果你使用的逆向工程是自己手写上去的配置文件,那么错误的范围就太大了.如果是你导入以前使用过的逆向工程,那么没有生成文件很可能是使用的操作系统不同. 原因:逆向工程中的路径问题,windows和mac ...

  8. C语言数据结构基础学习笔记——B树

    2-3树:是一种多路查找树,包含2结点和3结点两种结点,其所有叶子结点都在同一层次. 2结点:包含一个关键字和两个孩子(或没有孩子),其左孩子的值小于该结点,右孩子的值大于该结点. 3结点:包含两个关 ...

  9. Virtualbox扩容C盘

    oracle vm virtualbox虚拟机里面系统盘C盘容量不够,需要扩容,步骤如下: 1.使用命令更改当前虚拟机的文件大小 VBoxManage.exe modifyhd YOUR_HARD_D ...

  10. sqlserver 使用脚本创建作业

    --[作业常用的几个步骤] EXEC msdb.dbo.sp_delete_job EXEC msdb.dbo.sp_add_job EXEC msdb.dbo.sp_add_jobstep EXEC ...