在给定四元数旋转和指定轴的情况下,如何计算角度?

时间:2019-04-18 03:52:37

标签: c# unity3d axis angle quaternions

我正在尝试基于四元数沿指定四元数旋转同一轴的旋转分量,仅绕一个轴(任意单位矢量,不一定是x,y或z)旋转对象。

public void Rotate(Quaternion rotation, Vector3 axis, Vector3 pointToRotateAround)
{
     float angle = ?
     gameObject.transform.RotateAround(pointToRotateAround, axis, angle);
}

我不知道如何获得仅沿指定轴的四元数旋转角度。我可以在轴为y时执行此操作,例如:

public void Rotate(Quaternion rotation, Vector3 pointToRotateAround)
{
     gameObject.transform.RotateAround(pointToRotateAround, Vector3.up, rotation.eulerAngles.y);
}

我想复制上面的结果,但要复制给定的轴。

我已经深入Google并试图找到答案,但是我没有找到解决方案。任何帮助表示赞赏。

3 个答案:

答案 0 :(得分:1)

我解释您的问题的方式是,如果您有一组旋转点,它们将绕其他轴移动多少角度。

唯一的问题是,与另一个轴的夹角实际上取决于您要看的点。

source

但是,您可以尝试将旋转表示为轴角(ω, θ),然后将点积与轴v取为θ的新角,按w.v。这可能不是您想要的,但是如果您添加详细信息以及要实现的目标的更多详细信息,我们可能会更好地为您提供帮助。

答案 1 :(得分:0)

这是我想要的代码:

public void Rotate(Quaternion rotation, Vector3 axis, Vector3 pointToRotateAround)
{
     float angle;
     Vector3 rotAxis;

     rotation.ToAngleAxis(out angle, out rotAxis);

     float angleAroundAxis = Vector3.Dot(rotAxis, axis);

     gameObject.transform.RotateAround(pointToRotateAround, axis, angleAroundAxis);
}

答案 2 :(得分:0)

然后单位四元数 (w,x,y,z) 的旋转角度也写作 w+xi+yj+zkarccos(w)*2

如果角度>0,则方向为(x,y,z)/sin( arccos(w)/2 ),否则没有具体方向,绕任意轴旋转恒等; 0角度不旋转