向量
向量
定义与说明
向量定义
向量是一种同时具有
大小
和方向
的物理量
几何意义上来说: 向量是有大小和方向的有向线段
向量没有位置
零向量是唯一一个没有方向的向量
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的最小角度
- 通过移动2个向量,使其尾部重合
- 取最小角为θ(小于180的角)
- Math.acos( (a点乘b) / a的长度 乘以 b的长度 )
- 如果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