当前位置:   article > 正文

Unity 中的 3D 数学学习笔记——认识向量及运算_unity算一个面的法向量

unity算一个面的法向量

1:向量 具有大小和方向 也称矢量 向量的大小就是向量的长度,也叫做模。向量的方向描述了空间中向量的指向 向量中的数表达了向量在每个维度上的有向位移 2d向量(x,y),3d向量(x,y,z)

2:点(Point):点中的数表示了一个位置,它没有大小、方向的概念

3:在Unity中,只有Vector2、Vector3类型,没有Point2、Point3类型。 Vector2类型可以用来表示2D向量和点。Vector3类型可以用来表示3D向量和点。

Transform.position表示一个点,即游戏物体在世界坐标系中的点。

Transform.forward表示一个向量,即当前物体的物体坐标系的z轴在世界坐标系上的指向。

在Unity中,点和向量都是以(x,y,z)的形式表示。

4:当我们想让游戏物体处于某个位置时,我们可以使用Vector3类型来表示这个点的位置坐标。

当我们想让游戏物体沿着某个方向以一定的速度移动时,我们可以使用Vector3类型来表示速度的向量值,即速度的大小和方向。

当我们想计算2个游戏物体之间的距离时,实际上计算的就是以这2个游戏物体为起点和终点的向量的长度。

5:零向量是非常特殊的一个向量,它是唯一一个大小为0的向量,也是唯一一个没有方向的向量。2D(0,0),3D(0,0,0)  在Unity中,用 Vector3.zero 来表示3D零向量

6:负向量  每个向量都有一个负向量,满足条件:一个向量和它的负向量相加等于零向量。 向量变负,将得到一个和原向量大小相等,方向相反的向量。(2,-3,3)的负向量为(-2,3,-3)。即将向量的每个分量都变负

7:向量的长度 向量的长度即向量的大小或者向量的模 向量的大小就是向量各分量平方和的平方根

2D向量的长度:         3D向量的长度: 

在Unity中,可以通过Vector3.magnitude计算向量的长度。Vector3.sqrMagnitude则返回向量长度的平方

Vector3.Distance(A,B)可以计算2个点A,B之间的距离,即返回向量AB或向量BA的长度。等同于(B-A).magnitude或(A-B).magnitude。

一般计算比较两个物体之间距离 使用 Vector3.sqrMagnitude 因为开根号计算量很大 

8:向量与标量的乘法,即将向量的每个分量分别与标量相乘   3D向量与标量相乘:3(1,2,3) = (3,6,9)

9:向量与非零标量的除法,即乘以该标量的倒数  

Unity中使用运算符*来计算与标量的乘法,用运算符/来计算与标量的除法

10:单位向量也叫做标准化向量,就是大小为1的向量(向量 (1,1)不是一个单位向量长度为 根号2)

在只关心向量方向,不关心向量大小时,可以使用单位向量,例如求一个面的法线向量时。

对任意的非零向量,我们都可以计算出它的单位向量,即将其归一化(normalization)。

向量的归一化:求得向量的长度后,用向量除以它的长度

(4,3)归一化后的单位向量为:

在Unity中,可以使用Vector3.Normalize来归一化向量。使用Vector3.normalized来获得归一化后的单位向量

11:向量的加减

只有在两个向量的维度相同时,才可以相加或相减。向量的加法和减法,即将向量的各个分量相加或相减

(1,3)+(2,5) = (1+2,3+5) = (3,8)

(1,3)-(2,5) = (1-2,3-5) = (-1,-2)

向量的加法满足交换律:a+b = b+a

向量的减法则不满足交换律:a-b = -(b-a)

向量的加法可以理解成平移向量。向量的减法则可以理解为平移负向量。 Unity中,使用运算符+来计算向量的加法。使用运算符-来计算向量的减法。

12:向量的乘法 -----点积 也叫做向量的内积 表示为a·b,点不可以省略

计算时,向量的点积就是对应分量乘积的和,结果为一个标量

点积的计算公式为a·b=(ax,ay)·(bx,by)=axbx+ayby

(0,2)·(3,3) = 0×3+2×3 = 0+6 = 6

向量的点积满足交换律,即a·b = b·a

点积的第二种计算方法,则是通过两个向量之间的夹角的cos值

a·b = |a||b|cosθ,  θ是向量a和向量b的夹角。

点乘的结果越大,两向量越相近。通常也被用来求两个向量之间的夹角的大小。

可以通过向量的点积的结果的符号来判断两个向量的位置关系

如果值大于0,则夹角在0度到90度之间(不包含90度),两个向量的方向基本相同。

如果值等于0,则夹角为90度,两个向量的方向相互垂直。

如果值小于0,则夹角在90度到180度之间(不包含90度),两个向量的方向基本相反。

向量的点积还可以用来求得一个向量在另一个向量上的投影。 

向量b在向量a上的投影的长度可以表示为

向量b在向量a上的投影可以表示为   

(其实是先求出向量a 的单位向量 向量a/向量a的模长,再求出b在a上的投影长度, 投影长度乘以a的单位向量就是 b在a的投影)

在Unity中,向量的点积可以通过Vector3.Dot来计算。可以使用Vector3.Angle来获得两个向量之间的夹角的大小。结果在0度到180度之间

13:向量的乘法 -----叉积 也叫做向量的外积 表示为a×b,×不可以省略

叉积的结果仍是一个向量,叉积仅可应用于3D向量​​​​​​​

叉积的计算公式为

a×b=(ax,ay,az)×(bx,by,bz)=(aybz-azby,azbx-axbz,axby-aybx)

(1,2,3)×(-2,-2,3)=(6-(-6),(-6)-3,(-2)+4)=(12,-9,2)

叉积得到的向量垂直于原来的两个向量

a=(1,2,3),b=(-2,-2,3),a×b=(12,-9,2)。a·(a×b)=0,b·(a×b)=0。

a×b的长度等于向量的大小与向量夹角的sin值的积,即

也是以a和b为两边的平行四边形的面积的 大小。

我们可以通过向量的叉积来得到一个平面的法向量

还可以通过向量的叉积得到的结果向量的方向来判断向量b是在向量a的顺时针方向还是逆时针方向。

在Unity中,向量的叉积可以通过Vector3.Cross来计算。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/100155
推荐阅读
相关标签
  

闽ICP备14008679号