如题:求向量A在平面L上的投影向量(图左) 即求
其实等价于求向量,那在
中,
,所以只需要求
即可
而就是
在平面L的法向量的投影,所以代码就是
/// <summary>
/// 求向量A在平面B上的投影向量
/// </summary>
/// <param name="target">目标向量A</param>
/// <param name="normal">平面B的法向量的单位向量</param>
/// <returns></returns>
private Vector3 ProjectVectorOnPlane(Vector3 target, Vector3 normal)
{
// 使用向量的点积和法线向量,得到在平面上的投影
return target - Vector3.Dot(target, normal) * normal;
}
注意normal是单位向量,如果不是单位向量可以通过normal.normalized获得
当然Unity里面有自带的API:Vector3.ProjectOnPlane(Vector3 vector, Vector3 planeNormal)