3D数学 学习笔记(4) 几何图元
3D数学 学习笔记(4) 几何图元
参考书籍:
《3D数学基础:图形与游戏开发》
射线
p(t) = p0 + td
两种形式:
- d为增量向量,t范围在[0, 1],即0为起点,1为终点。
- 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为周长。
内切圆的半径可以由三角形面积除以周长得到:
外心
三角形外切圆的圆心,也是各边垂直平分线的交点。
计算重心坐标,外心,外接圆半径:
多边形
分简单多边形和复杂多边形。简单多边形没有洞,复杂的有。复杂多边形转换成简单多边形可以在洞直接做连接线,把多边形弄成只有一条边。
凸多边形和凹多边形
判断方法:
- 计算每个顶点较小的角(内角或外角)和,凸多边形得到(n-2)180°,凹多边形则小于这个值。用点乘来判断较小的角(反三角函数,取得小于180°的角)。
- 判断所有点转向应该一致(法向量方向一致),用叉乘可以得到法向量,再点乘多边形的法向量就可以判断该点是否凹点(点乘小于0)。
3D数学 学习笔记(4) 几何图元相关推荐
- Unity 中的 3D 数学学习笔记——认识坐标系及坐标系之间的转换
一 :3d空间坐标系 x,y,z 轴 z轴方向确定有两种方式 左手坐标系和右手坐标系 左手坐标系:伸开左手,大拇指指向X轴正方向,食指指向Y轴正方向,其他三个手指指向Z轴正方向. 右手坐标系:伸开右 ...
- 图像坐标:我想和世界坐标谈谈(A) 【计算机视觉学习笔记--双目视觉几何框架系列】
玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题.希望这样的方式让大家以一个轻松的心态阅读玉米的<计算机视觉学习笔记>双目视觉数学架构系列博客.这个系列博客旨在捋顺一下已标定的双 ...
- 3D数学读书笔记——笛卡尔坐标系统
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...
- 数学学习笔记--线性代数
开始复习 AI 算法的基础–数学部分,主要是三方面的内容: 线性代数 概率论 微积分 参考内容如下: <深度学习> https://github.com/scutan90/DeepLear ...
- 3D数学读书笔记——向量运算及在c++上的实现
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24782661 开始之前:接 ...
- 3D数学读书笔记——矩阵基础番外篇之线性变换
本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...
- 3D数学读书笔记——3D中的方位与角位移
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/25339595 方位和角位移 ...
- (七)立体标定与立体校正 【计算机视觉学习笔记--双目视觉几何框架系列】
七.立体标定与立体校正 这篇博文中,让玉米和大家一起了解一下,张氏标定是怎样过渡到立体标定的?在这里主要以双目立体视觉进行分析.对于双目立体视觉,我们有两个摄像头.它们就像人的一双眼睛一样,从不同的方 ...
- 张正友标定法 【计算机视觉学习笔记--双目视觉几何框架系列】
三.致敬"张正友标定" 此处"张正友标定"又称"张氏标定",是指张正友教授于1998年提出的单平面棋盘格的摄像机标定方法.张氏标定法已经作为 ...
- A morphable model for the synthesis of 3D faces 学习笔记(未完)
目录标题 欢迎使用Markdown编辑器 〇.数据库 一. 建立人脸表示模型 二.人脸模型的处理 三.面部特征 四.形状模型与输入模型的对应 4.1 形状模型与照片的对应 4.2 形状模型与三维扫描图 ...
最新文章
- SPOJ AMR10I Dividing Stones --DFS
- 轮播图html_【技术篇前端】用html+css实现小米首页部分内容(含源码,不含轮播图)...
- Machine Learning | (8) Scikit-learn的分类器算法-随机森林(Random Forest)
- QIIME 2用户文档. 16纵向和成对样本比较q2-longitudinal(2019.7)
- 中国云计算厂商营收排名:阿里云完虐微软
- 简单创建序列和触发器示例
- PHP实现带重试功能的curl连接示例
- 【Linux系统编程】进程间通信之无名管道
- SPOJ - NUMOFPAL Number of Palindromes(回文自动机)
- python manager详解_python 多进程共享全局变量之Manager()详解
- JAR包、WAR包及EAR包的区别
- Linux学习笔记9
- java服务端集成极光消息推送--详细开发步骤
- 使用Tslib在触摸屏上显示汉字
- ftp用的是tcp还是udp_TCP与UDP的区别究竟在哪
- jQuery 插件使用记录
- xps13 9360黑苹果
- 高通平台音频软件架构
- 越狱Season 1-Episode 4: Cute Poison
- 微信小程序定义和调用全局变量globalData
热门文章
- 有关计算机学的心得体会,关于计算机学习心得体会大全
- 求cosx计算公式 【问题描述】 已知cosx的近似计算公式如下: cosx = 1 - x2/2! + x4/4! - x6/6! + ... + (-1)nx2n/(2n)!
- sql日志文件查看工具
- qqkey获取原理_QQ key盗号木马原理分析
- DevExpress DXperience最新版订阅加载程序
- 工具分享:xampp-windows-x64-7.3.2-1-VC15-installer.exe 请自行下载(附下载链接)
- Element UI 官网以及其他技术文档
- Java中下载jar包
- Hadoop学习目录导航
- 【Java后台】从零开始的Java后台开发(二)