OpenGL & Metal

向量的理解

2020-07-18  本文已影响0人  黑眼豆豆_

向量

向量指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。在3D笛卡尔坐标系中,可以用XYZ三个值确定一个点,而这个点可以称之为向量

向量.jpg 向量的计算公式.jpg

如果一个向量不是单位向量,而把它缩放到1,这个过程叫做标准化,公式如下:


1595076032755.jpg

向量点乘

向量点乘比较简单,是相应元素的乘积的和。

向量点乘.jpg
注意结果不是一个向量,而是一个标量(Scalar),它是可以表示向量之间的夹角(θ)。
向量点乘公式如下:
//假设两个向量,U,V
u=(u1,u2,u3) v=(v1,v2,v3)
//点乘公式如下
u * v = u1v1+u2v2+u3v33=lul*lvl*COS(U,V)

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个向量定义的平面垂直。


向量叉乘.png

如图所示,向量a和向量b进行叉乘,得到一个垂直向上的向量,此为叉乘所得到的结果。
叉乘公式如下

//向量叉乘公式
A x B = |A||B|Sin(θ)

有点类似于点乘,但是与点乘不同是θ是有角度的,对于点乘的结果,我们遵循右手法则:
1.右手手掌张开,四指并拢,大拇指垂直于四指指向的方向;
2.伸出右手,四指弯曲,四指与A旋转到B方向一致,那么大拇指指向为C向量的方向。
如图所示

右手法则.png
所以,叉乘并不满足交换律,即向量a和向量b交换后,得到的结果不相同。

math3d库中提供了关于叉乘的API。

//1.m3dCrossProduct3函数获得2个向量之间的叉乘结果,得到一个新的向量。
void m3dCrossProduct3(M3DVector3f result,const M3DVector3f  u ,const M3DVector3f v);
上一篇下一篇

猜你喜欢

热点阅读