DX学习笔记一——向量

1.左手系和右手系

将手握起来手指的方向为x指向y的时候,如果大拇指朝外,就是右手系,如果大拇指朝内,就是左手系。DX使用的是左手坐标系

向量D3DVECTOR3

D3DXVECTOR3是DX的3维向量的类,有三个浮点型值做成员变量D3DXVECTOR3 a(1.f,2.f,3.f)

向量相等

D3DXVECTOR重载了等号运算符,当且仅当两个向量的3个值都相等的时候两个向量相等,由于浮点数没有相等这个概念,所以其实重载的等号和不等号是做了近似比较的,在满足一定精度的情况下相等。
向量重载的运算符包括:

运算符 Value
== 判断相等
!= 判断不相等
+ 两个向量各个维的数值相加
- 两个向量各个维的数值相减
和数的* 两个向量各个维的数值和被乘的数相乘

向量的长度 magnitude

向量的长度为向量的欧式长度,是向量各个维度平方和的开方,在DX的D3DXVECTOR3中,使用D3DXVec3Length计算。magnitude的值为 14 \sqrt{14} 14

D3DXVECTOR3 u(1.f,2.f,3.f);
float magnitude = D3DXVec3Length(&u);

向量的规范化,也称单位化

所谓单位化是让向量方向不变,长度变为1,从上面向量长度定义可以知道,向量长度为1,可以通过每个分量除以向量本身的长度获取。在DX中使用D3DXVec3Normalize.这里v和m都有单位化后的结果,其中m实际上最后指向了v。

D3DXVECTOR3 u(1.f,2.f,3.f);
D3DXVECTOR3 v;
D3DXVECTOR3* m;
m = D3DXVec3Normalize(&v,u)

向量的点积

向量的点积是向量的两种乘法之一,定义为: u ⋅ v = u x v x + u y v y + u z v z u\cdot v=u_xv_x+u_yv_y+u_zv_z uv=uxvx+uyvy+uzvz,由余弦定理 u ⋅ v = ∣ ∣ u ∣ ∣ ⋅ ∣ ∣ v ∣ ∣ c o s θ u\cdot v=||u||\cdot|| v||cos\theta uv=uvcosθ.所以向量点积常用来计算向量的夹角,向量是否垂直
在DX中使用D3DXVec3Dot计算两个向量的点积。

D3DXVECTOR3 u(1.f,0.f,0.f);
D3DXVECTOR3 v(0.f,1.f,0.f);
float dotvalue = D3DXVec3Dot(&u,&v)//dotvalue=0

向量的叉积

向量的叉积是和点积不同的向量的另一个乘法,两个向量的叉积的结果为一个向量,且向量和两个向量都正交。叉积的定义为: p = u ⋅ v = [ ( u y v z − u z v y ) , ( u z v x − u x v z ) , ( u x v y − u y v x ) ] p=u\cdot v=[(u_yv_z -u_zv_y), (u_zv_x-u_xv_z),(u_xv_y - u_yv_x)] p=uv=[(uyvzuzvy),(uzvxuxvz),(uxvyuyvx)].从定义不难看出,两个向量的叉积的结果与向量的顺序有关 u ⋅ v = − ( v ⋅ u ) u\cdot v=-(v\cdot u) uv=(vu),也就是说向量只有方向相反,也就是说获得的向量是u和v所在平面的法向量,但是是向里还是向外和相乘的顺序有关。而这个结果也和我们坐标系有关,一般如果在左手坐标系我们用左手从第一个向量指向第二个向量,右手坐标系我们则使用右手,然后大拇指所指向的方向为获得的向量的方向。理解起来也简单,也就是x和y方向的单位向量相乘最后获得的是z的单位向量。叉积在DX中使用D3DXVec3Cross。向量的叉积一般用来计算平面的法向量

D3DXVECTOR3 u(1.f,0.f,0.f);
D3DXVECTOR3 v(0.f,1.f,0.f);
D3DXVECTOR3 p=D3DXVec3Cross(&u,&v)//p(0.f,0.f,1.f)

おすすめ

転載: blog.csdn.net/u012505629/article/details/119921225