Vector 使用两个向量旋转最小的量
在过去的几个小时里,我在网上问了很多问题,试图找出如何用最小距离计算两个向量之间的旋转。另外,使用Atan2和使用点积有什么区别?我最常见到他们 其目的是仅基于X/Z位置的差异在y轴上旋转(考虑三维世界中的自上而下旋转)Vector 使用两个向量旋转最小的量,vector,xna,rotation,angle,Vector,Xna,Rotation,Angle,在过去的几个小时里,我在网上问了很多问题,试图找出如何用最小距离计算两个向量之间的旋转。另外,使用Atan2和使用点积有什么区别?我最常见到他们 其目的是仅基于X/Z位置的差异在y轴上旋转(考虑三维世界中的自上而下旋转) 选项1:使用Atan2。似乎工作得很好,除非它将弧度从正变为负 float radians = (float)Math.Atan2(source.Position.X - target.Position.X, source.Position.Z - target.Pos
float radians = (float)Math.Atan2(source.Position.X - target.Position.X, source.Position.Z - target.Position.Z);
npc.ModelPosition.Rotation = new Vector3(0,
npc.ModelPosition.Rotation.Y + (radians),
0);
float dot = Vector3.Dot(Vector3.Normalize(source.Position), Vector3.Normalize(target.Position));
float angle = (float)Math.Acos(dot);
npc.ModelPosition.Rotation = new Vector3(0,
npc.ModelPosition.Rotation.Y + (angle),
0);
詹姆斯你计算两个不同的角度: 角度α是用atan2计算的角度(等于
对侧/相邻侧
)。角度β是用点积计算的
您可以通过使用点积获得类似的结果(与atan相同)
angle = acos(dot(normalize(target - source), -z))
(-z
是负z方向的单位向量)
但是,您将失去该标志