内容提要
- unity3d坐标系
- 向量运算
unity3d坐标系
*3d坐标系分为两种,分别是左手坐标系和右手坐标系。u3d使用的是左手坐标系*。
通常3d坐标系中x轴右侧代表水平正方形,y轴为垂直正方向向上,z轴分为向里和向外两种,正方向向里的是左手坐标系,向外的是右手坐标系。
左手坐标系,拇指指向x正方向,食指指向y正方向,中指指向里面为z轴正方向
向量运算
加法
Vector3 a = new Vector3(0, 1, 1);
Vector3 b = new Vector3(1, 2, 3);
Vector3 c = a + b = (0+1,1+2,1+4)=1,3,4;
几何意义
减法
Vector3 a = new Vector3(0, 1, 1);
Vector3 b = new Vector3(1, 2, 3);
Vector3 c = a + b = (0-1,1-2,14)=-1,-1,-2;
几何意义
点乘Dot
点乘用来计算两个向量的朝向的相似度,计算点乘的向量需要单位化,得到的结果是两个向量的cos值,在-1到1之间的浮点数,-1表示朝向相反,1表示朝向相同,0表示两个向量相互垂直- 表征或计算两个向量之间的夹角
- b向量在a向量方向上的投影积,当a是单位向量时,内积意义是投影。
- 当a是直线L的单位法向量时,计算b终点到L的距离
private void Dot(Vector3 a, Vector3 b)
{
float c = Vector3.Dot(a.normalized, b.normalized);
Debug.Log($"Dot={c}");
}
- 叉乘Cross
private void Cross(Vector3 a, Vector3 b)
{
Vector3 c = Vector3.Cross(a, b);
Debug.Log($"Cross={c}");
}
叉乘的得到一个向量,这个向量垂直于向量a和向量b所组成的平面,用于计算法向量
1. 通过两个向量的外积,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系;
2. 当a是单位向量时,计算b终点到a所在直线的距离
3. 在二维空间中,aXb等于由向量a和向量b构成的平行四边形的面积
- Angle
用于计算两个向量之间的夹角
private void Angle(Vector3 a, Vector3 b)
{
float c = Vector3.Angle(b, a);
Debug.Log($"Angle={c}");
}