我正在尝试基于四元数沿指定四元数旋转同一轴的旋转分量,仅绕一个轴(任意单位矢量,不一定是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并试图找到答案,但是我没有找到解决方案。任何帮助表示赞赏。
答案 0 :(得分:1)
我解释您的问题的方式是,如果您有一组旋转点,它们将绕其他轴移动多少角度。
唯一的问题是,与另一个轴的夹角实际上取决于您要看的点。
但是,您可以尝试将旋转表示为轴角(ω, θ)
,然后将点积与轴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+zk
是 arccos(w)*2
。
如果角度>0,则方向为(x,y,z)/sin( arccos(w)/2 )
,否则没有具体方向,绕任意轴旋转恒等; 0角度不旋转