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

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)。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值