开头

自学了unity 一个多月了。都是工作不忙的时候,现在总结一下防止以后忘记了。因为很多视频啊、老师啊,说的都是他们的理解
它不能代表自己的理解。最终也无法转换成自己的知识点。所以赶紧感悟了一些就记下来一些。今天主要总结下向量。全部干货大白话。

 

  • 向量是一中既有大小又有方向的数学值。
  • 单位化(标准化) Vector2.Normalize  Vector3.Normalize 就是从原点,一个单位 也就是1米的一个方向。
  • 向量的相加 就是  ( x1,y1,z1) + (x2,y2,z2) = (x1+x2,y1+y2,z1+z2) 其实也可以说叫做平行四边形法则。两个向量的加,是首尾部相连的 平行四边形对角线。
  • 相减 就是 两个向量尾部相连 ,由减数指向被减数的向量。
  • 点乘、 点积、是一个玩意。它是用来计算向量的夹角的
  •   |a|就是向量的模 也就是长度

根据这个公式就可以计算向量a和向量b之间的夹角。从而就可以进一步判断这两个向量是否是同一方向,是否正交(也就是垂直)等方向关系,具体对应关系为:

     a·b>0    方向基本相同,夹角在0°到90°之间

     a·b=0    正交,相互垂直  

     a·b<0    方向基本相反,夹角在90°到180°之间 

  • unity中 点乘的方法是 Vector3.Dot() 计算模是
  •  Vector3 a = new Vector3(3, 4, 5); float b = Vector3.Magnitude(a); float c = a.magnitude; print("获取长度的两种方法:" + b + "::::" + c);

Vector3常用方法:

Cross:向量叉乘
Dot:向量点乘
Lerp(v(from),v(to),t):两个向量之间的线性插值。按照数字t在from到to之间插值。
MoveTowards(v,v,speed);当前的地点移向目标。
RotateTowards(v,v,r,m);当前的向量转向目标。
Max(v,v),Min(v,v); 向量的最大值,最小值
Angle:返回两个向量之间的夹角
Distance:返回两个向量之间的距离
Project : 极端向量在另一向量上的投影
Operator + 向量相加
Operator - 向量相减
Operator * 向量乘以标量
Operator / 向量除以标量
Operator== 若向量相等返回true
Operator != 若向量不等于则返回true

点乘与叉乘的理解:

点乘:

两个向量点乘得到一个标量 ,数值等于两个向量长度相乘后再乘以二者夹角的余弦值 。
如果两个向量a,b均 为单位 向量 ,那么a.b等于向量b在向量a方向上的投影的长度
点乘后得到的是一个值
若结果 == o,则 两向量 互垂直 。
若结果 < 0 ,则 两向量夹角大于90°。
若结果 >0 ,则两向量夹角小于 90°。

叉乘:

两 个向量的叉乘得到一个新的向量 ,新向量垂直于原来的两个向量再乘夹角的正弦值
叉乘后得到的还是一个向量
在Unity3D里面。两个向量的点乘所得到的是两个向量的余弦值,也就是-1 到1之间,
0表示垂直,-1表示相反,1表示相同方向。 两个向量的叉乘所得到的是两个向量所组成的面
的垂直向量,分两个方向。 简单的说,点乘判断角度,叉乘判断方向。 形象的说当一个敌人
在你身后的时候,叉乘可以判断你是往左转还是往右转更好的转向敌人,点乘得到你当前的面
朝向的方向和你到敌人的方向的所成的角度大小。