3D数学 学习笔记(4) 几何图元

参考书籍:
《3D数学基础:图形与游戏开发》


射线

p(t) = p0 + td

两种形式:

  1. d为增量向量,t范围在[0, 1],即0为起点,1为终点。
  2. d为单位向量,t范围在[0, l],l为射线的长度。

直线

斜截式

  • y = mx + b

2D直线隐式定义

  • ax + by = d

向量法标记的2D直线隐式定义

  • p·n = d
    n为垂直线上单位向量,p为线上任意点(x, y)


用线段的垂直平分线定义

  • || p·q || = || p·r ||

转换到隐格式:


球和圆

隐式公式(p为球表面的任意点,c是圆心,r是半径)

|| p - c || = r

  • 圆周长:C = 2πr = πD
  • 圆面积:A = πr2
  • 球表面积:S = 4 πr2
  • 球体积:V = 4/3 πr3

矩形边界框

在Unity中,代表Bounds类,BoxCollider,和MeshRenderer都包含这个类的对象。

  • AABB(axially aligned bounding box):轴对齐矩形边界框。
  • OBB(oriented bounding box):方向矩形边界框。

AABB转换

小框:通过变换后物体重新计算AABB。大框:通过原来的AABB八个点旋转后重新赋值。

下面是通过AABB转换到新的AABB。

计算时新的xyz的最大或最小值时,可以直接通过判断矩阵的值正负来计算。如下代码段:

if (m.m11 > 0.0 f ) { min. x += m.m11 ∗ box .min. x ; max. x += m.m11 ∗ box .max. x ;
} else {min. x += m.m11 ∗ box .max. x ; max. x += m.m11 ∗ box .min. x ;
}

平面

  • ax + by + cz =d
  • p·n = d (n = [a,b,c],平面的法向量,单位向量。p为平面内任意一点。)

可以用三个不共线的点求出平面方程:先求法向量n,再通过任意一点与法向量点乘后可得出d。

### 多于三个的平面计算
如果只考虑三个计算可能会因为共线问题,精度问题或者是凹多边形而计算错误。所以需要考虑所有点。

点到平面距离

a = q·n - d (q为计算的点,a为0时代表在平面上,小于0为在背面。)



三角形

正弦和余弦公式:

三角形面积

  • 海伦公式:(s为周长的一半)

  • 顶点坐标直接求面积:

  • 因为是平行四边形面积的一半,所以可以直接由两个向量叉乘求模除于2得到计算结果:

重心坐标空间

三角形所在平面的任意点都能表示为顶点的加权平均值。这个权就是称作重心坐标。重心坐标的和为1:b1 + b2 + b3 = 1。




因为中心坐标和为1,所以可以通过两个值计算直接计算出第三个值。解方程组合(省略)后可得到结论:中心坐标每个值都可理解为对应子三角形与总三角形的比值。(注意:这里是计算2D空间下的中心坐标)


要计算3D空间下的中心坐标,可以把三角形投影到2D平面,因为投影面积和原面积成比例,而要抛弃的坐标选:法向量值绝对值最大的坐标,即尽可能让三角形投影较大的展示出来。
在计算三角形面积时,因为叉乘大小对顶点顺序不敏感,总是正的,对于在在三角形外的点就不适用了(会有负值的重心坐标)。可以用点乘来判断方向。


因为分子分母都有法向量n,所以不必正则化n。

重心(质心)

三角形的最佳平衡点,三条中线的交点。重心坐标三个值都一样,为1/3。

内心

三角形内切圆的圆心,也是角平分线交点。p为周长。

内切圆的半径可以由三角形面积除以周长得到:

外心

三角形外切圆的圆心,也是各边垂直平分线的交点。

计算重心坐标,外心,外接圆半径:


多边形

分简单多边形和复杂多边形。简单多边形没有洞,复杂的有。复杂多边形转换成简单多边形可以在洞直接做连接线,把多边形弄成只有一条边。

凸多边形和凹多边形

判断方法:

  1. 计算每个顶点较小的角(内角或外角)和,凸多边形得到(n-2)180°,凹多边形则小于这个值。用点乘来判断较小的角(反三角函数,取得小于180°的角)。
  2. 判断所有点转向应该一致(法向量方向一致),用叉乘可以得到法向量,再点乘多边形的法向量就可以判断该点是否凹点(点乘小于0)。

3D数学 学习笔记(4) 几何图元相关推荐

  1. Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换

    一 :3d空间坐标系  x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...

  2. 图像坐标:我想和世界坐标谈谈(A) 【计算机视觉学习笔记--双目视觉几何框架系列】

    玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记>双目视觉数学架构系列博客.这个系列博客旨在捋顺一下已标定的双 ...

  3. 3D数学读书笔记——笛卡尔坐标系统

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

  4. 数学学习笔记--线性代数

    开始复习 AI 算法的基础–数学部分,主要是三方面的内容: 线性代数 概率论 微积分 参考内容如下: <深度学习> https://github.com/scutan90/DeepLear ...

  5. 3D数学读书笔记——向量运算及在c++上的实现

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 开始之前:接 ...

  6. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

  7. 3D数学读书笔记——3D中的方位与角位移

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25339595 方位和角位移 ...

  8. (七)立体标定与立体校正 【计算机视觉学习笔记--双目视觉几何框架系列】

    七.立体标定与立体校正 这篇博文中,让玉米和大家一起了解一下,张氏标定是怎样过渡到立体标定的?在这里主要以双目立体视觉进行分析.对于双目立体视觉,我们有两个摄像头.它们就像人的一双眼睛一样,从不同的方 ...

  9. 张正友标定法 【计算机视觉学习笔记--双目视觉几何框架系列】

    三.致敬"张正友标定" 此处"张正友标定"又称"张氏标定",是指张正友教授于1998年提出的单平面棋盘格的摄像机标定方法.张氏标定法已经作为 ...

  10. A morphable model for the synthesis of 3D faces 学习笔记(未完)

    目录标题 欢迎使用Markdown编辑器 〇.数据库 一. 建立人脸表示模型 二.人脸模型的处理 三.面部特征 四.形状模型与输入模型的对应 4.1 形状模型与照片的对应 4.2 形状模型与三维扫描图 ...

最新文章

  1. SPOJ AMR10I Dividing Stones --DFS
  2. 轮播图html_【技术篇前端】用html+css实现小米首页部分内容(含源码,不含轮播图)...
  3. Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)
  4. QIIME 2用户文档. 16纵向和成对样本比较q2-longitudinal(2019.7)
  5. 中国云计算厂商营收排名:阿里云完虐微软
  6. 简单创建序列和触发器示例
  7. PHP实现带重试功能的curl连接示例
  8. 【Linux系统编程】进程间通信之无名管道
  9. SPOJ - NUMOFPAL Number of Palindromes(回文自动机)
  10. python manager详解_python 多进程共享全局变量之Manager()详解
  11. JAR包、WAR包及EAR包的区别
  12. Linux学习笔记9
  13. java服务端集成极光消息推送--详细开发步骤
  14. 使用Tslib在触摸屏上显示汉字
  15. ftp用的是tcp还是udp_TCP与UDP的区别究竟在哪
  16. jQuery 插件使用记录
  17. xps13 9360黑苹果
  18. 高通平台音频软件架构
  19. 越狱Season 1-Episode 4: Cute Poison
  20. 微信小程序定义和调用全局变量globalData

热门文章

  1. 有关计算机学的心得体会,关于计算机学习心得体会大全
  2. 求cosx计算公式 【问题描述】 已知cosx的近似计算公式如下: cosx = 1 - x2/2! + x4/4! - x6/6! + ... + (-1)nx2n/(2n)!
  3. sql日志文件查看工具
  4. qqkey获取原理_QQ key盗号木马原理分析
  5. DevExpress DXperience最新版订阅加载程序
  6. 工具分享:xampp-windows-x64-7.3.2-1-VC15-installer.exe 请自行下载(附下载链接)
  7. Element UI 官网以及其他技术文档
  8. Java中下载jar包
  9. Hadoop学习目录导航
  10. 【Java后台】从零开始的Java后台开发(二)