向量
向量指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。在3D笛卡尔坐标系中,可以用XYZ三个值确定一个点,而这个点可以称之为向量。
![](https://img.haomeiwen.com/i10153078/59c9a4e0df9ff3ab.jpg)
-
向量与标量
向量:指具有大小(magnitude)和方向的量,例如上图中的P点,由原点指向P点时不仅展示了距离,也展示了方向。
标量:只展示大小,比如1,5,10等等。 - 单位向量,向量的长度为1称之为单位向量。
- 向量长度也称之为向量的模。计算方法如下:
![](https://img.haomeiwen.com/i10153078/85323e47309bc526.jpg)
如果一个向量不是单位向量,而把它缩放到1,这个过程叫做标准化,公式如下:
![](https://img.haomeiwen.com/i10153078/5c8beddab5e57e2b.jpg)
向量点乘
向量点乘比较简单,是相应元素的乘积的和。
![](https://img.haomeiwen.com/i10153078/0a05b9a7f588c654.jpg)
注意结果不是一个向量,而是一个标量(Scalar),它是可以表示向量之间的夹角(θ)。
向量点乘公式如下:
//假设两个向量,U,V
u=(u1,u2,u3) v=(v1,v2,v3)
//点乘公式如下
u * v = u1v1+u2v2+u3v33=lul*lvl*COS(U,V)
- 前提条件:2个向量必须为单位长度。
- 具体操作:2个向量进行点乘。
- 结果:返回一个[-1,1]范围的只,这个值时候夹角的余弦值,cos。
math3d库中提供了关于点乘的API。
//1.m3dDotProduct3函数获得2个向量之间的点乘结果;
float m3dDotProduct3(const M3DVector3f u,const M3DVector3f v);
//2.m3dGetAngleBetweenVector3可获得2个向量之间夹角的弧度值;
float m3dGetAngleBetweenVector3(const M3DVector3f u,const
M3DVector3f v);
向量叉乘
2个向量的叉乘可以得到另外一个向量,新的向量会与原来的2个向量定义的平面垂直。
![](https://img.haomeiwen.com/i10153078/5204aa6859fea3e6.png)
如图所示,向量a和向量b进行叉乘,得到一个垂直向上的向量,此为叉乘所得到的结果。
叉乘公式如下
//向量叉乘公式
A x B = |A||B|Sin(θ)
有点类似于点乘,但是与点乘不同是θ是有角度的,对于点乘的结果,我们遵循右手法则:
1.右手手掌张开,四指并拢,大拇指垂直于四指指向的方向;
2.伸出右手,四指弯曲,四指与A旋转到B方向一致,那么大拇指指向为C向量的方向。
如图所示
![](https://img.haomeiwen.com/i10153078/b7732aa07657c344.png)
所以,叉乘并不满足交换律,即向量a和向量b交换后,得到的结果不相同。
math3d库中提供了关于叉乘的API。
//1.m3dCrossProduct3函数获得2个向量之间的叉乘结果,得到一个新的向量。
void m3dCrossProduct3(M3DVector3f result,const M3DVector3f u ,const M3DVector3f v);
网友评论