向量

向量


定义与说明

向量定义

向量是一种同时具有大小方向的物理量
几何意义上来说: 向量是有大小和方向的有向线段
向量没有位置
零向量是唯一一个没有方向的向量

2点确定向量

如果只有一点时,默认另一点为原点(0,0)

Vector2 pointA = new Vector2(1,2);
Vector2 pointB = new Vector2(3,4);

//向量AB = (3-1, 4-2); xy分量分别相减,得到向量


运算

向量的大小(长度,模)

各分量平方和的平方根(利用勾股定理可求)


Vector2 u = new Vector(3, 4);

// 计算向量u的长度
float length = Math.sqrt(3*3, 4*4);

向量与标量相乘

各分量分别相乘, 返回一个向量
向量长度扩大n倍,方向不变. 但如果n小于0,则方向反转


float multiple = 5;

// 向量u扩大5(multiple)倍
Vector2 u = new Vector(3, 4);
u.x *= multiple;
u.y *= multiple;

标准化向量

向量/长度
将向量化为方向不变长度为1的向量, 也称为单位向量法线


Vector2 u = new Vector(3, 4);

// 计算向量u的长度
float length = Math.sqrt(3*3, 4*4);

// 标准化向量u,使其长度为1,方向不变
Vector2 Norm_u = new Vector(3/length, 4/length);


向量加法

各分量分别相加

三角形法则

当向量a的头连接着向量b的尾(通过平移向量). 然后从a的尾向b的头画一个向量c得到三角形
将上述向量a,b平移得到平行四边形
上述情况下向量 c = a+b; 这时向量c刚好是平行四边形的长对边


当向量a的尾连接着向量b的尾(通过平移向量). 然后从a的头向b的头画一个向量c得到三角形
将上述向量a,b平移得到平行四边形
b-a则c指向b, 否则相反
上述情况下向量 c = b-a; 这时向量c刚好是平行四边形的短对边

向量点乘

各对应分量乘积的和 u(x,y) 点乘 v(x1, y1) = x*x1 + y*y1
点乘的结果是一个标量
向量点乘可以用来求2向量之间的最小角度

求2向量a和b的最小角度

  1. 通过移动2个向量,使其尾部重合
  2. 取最小角为θ(小于180的角)
  3. Math.acos( (a点乘b) / a的长度 乘以 b的长度 )
  4. 如果a,b为单位向量则可化简为: Math.acos(a 点乘 b)

当 a点乘b == 0 a和b互相垂直
当 a点乘b > 0 a和b夹角小于90度
当 a点乘b < 0 a和b夹角大于90度

向量叉乘

叉积只能用于3D向量. 比如用于计算平面法线
叉积的结果同时垂直于2个相乘的向量

// 叉积如名字一样,把下面看成上下交叉相乘, 中间是最大的叉叉
Vector3 u = (x, y, z);
Vector3 v = (a, s, d);

Vector3 uv = (yd - zs, za - xd, xs - ya);
// uv同时垂直于向量u和v

原文地址:https://www.cnblogs.com/xueyoucd/p/5379938.html