欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-26 16:09:27
...

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)
    3D数学 学习笔记(4) 几何图元

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

用线段的垂直平分线定义

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

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

转换到隐格式:
3D数学 学习笔记(4) 几何图元


球和圆

隐式公式(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八个点旋转后重新赋值。
3D数学 学习笔记(4) 几何图元

下面是通过AABB转换到新的AABB。
3D数学 学习笔记(4) 几何图元

计算时新的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。
3D数学 学习笔记(4) 几何图元

多于三个的平面计算

如果只考虑三个计算可能会因为共线问题,精度问题或者是凹多边形而计算错误。所以需要考虑所有点。
3D数学 学习笔记(4) 几何图元

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

点到平面距离

a = q·n - d (q为计算的点,a为0时代表在平面上,小于0为在背面。)
3D数学 学习笔记(4) 几何图元

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


三角形

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

正弦和余弦公式:
3D数学 学习笔记(4) 几何图元

三角形面积

  • 海伦公式:(s为周长的一半)
    3D数学 学习笔记(4) 几何图元

  • 顶点坐标直接求面积:
    3D数学 学习笔记(4) 几何图元

  • 因为是平行四边形面积的一半,所以可以直接由两个向量叉乘求模除于2得到计算结果:
    3D数学 学习笔记(4) 几何图元

重心坐标空间

三角形所在平面的任意点都能表示为顶点的加权平均值。这个权就是称作重心坐标。重心坐标的和为1:b1 + b2 + b3 = 1。
3D数学 学习笔记(4) 几何图元

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

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

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

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

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

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

因为分子分母都有法向量n,所以不必正则化n。
3D数学 学习笔记(4) 几何图元

重心(质心)

三角形的最佳平衡点,三条中线的交点。重心坐标三个值都一样,为1/3。
3D数学 学习笔记(4) 几何图元

内心

三角形内切圆的圆心,也是角平分线交点。p为周长。
3D数学 学习笔记(4) 几何图元

内切圆的半径可以由三角形面积除以周长得到:
3D数学 学习笔记(4) 几何图元

外心

三角形外切圆的圆心,也是各边垂直平分线的交点。
3D数学 学习笔记(4) 几何图元

计算重心坐标,外心,外接圆半径:
3D数学 学习笔记(4) 几何图元


多边形

分简单多边形和复杂多边形。简单多边形没有洞,复杂的有。复杂多边形转换成简单多边形可以在洞直接做连接线,把多边形弄成只有一条边。
3D数学 学习笔记(4) 几何图元

凸多边形和凹多边形

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


相关标签: 数学 3d

上一篇: PHP chmod

下一篇: 旋转-欧拉角