Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Java)将四元数转换为弧度(或度)?_Java_Opengl_Quaternions_Bulletphysics_Radians - Fatal编程技术网

(Java)将四元数转换为弧度(或度)?

(Java)将四元数转换为弧度(或度)?,java,opengl,quaternions,bulletphysics,radians,Java,Opengl,Quaternions,Bulletphysics,Radians,在过去的几天里,我一直在玩OpenGL和JBullet。经过大量的修补,我终于修复了JBullet中的许多bug,并使其可用于一些演示。我目前遇到的问题是,我无法将转换转换为度,到目前为止,我已经用四元数获得了最好的结果,使用以下代码将转换为弧度: public Vector3f getRadians(Quat4f quat) { Vector3f v = new Vector3f(); //float scale = (float) Math.abs(quat.x * quat

在过去的几天里,我一直在玩OpenGL和JBullet。经过大量的修补,我终于修复了JBullet中的许多bug,并使其可用于一些演示。我目前遇到的问题是,我无法将转换转换为度,到目前为止,我已经用四元数获得了最好的结果,使用以下代码将转换为弧度:

public Vector3f getRadians(Quat4f quat) {
    Vector3f v = new Vector3f();
    //float scale = (float) Math.abs(quat.x * quat.y * quat.z); //Apparently the scale of the angle, thought without I get a almost perfect result on the X-Axis
    float angle = (float) Math.abs(Math.acos(quat.w)) * 2.0f;

    v.x = angle * Math.round(quat.x);
    v.y = angle * Math.round(quat.y);
    v.z = angle * Math.round(quat.z);               

    return v;
}

值得注意的是,我唯一的成功是在四元数的X轴上,而这在任何其他轴上都没有平移。更不用说它在0-6度之间的任何位置都会关闭。

我真的不确定这是您想要的,但是从glm::gtx::四元数:

inline valType roll
(
    detail::tquat<valType> const & q
)
{
    return atan2(valType(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z);
}

template <typename valType> 
inline valType pitch
(
    detail::tquat<valType> const & q
)
{
    return atan2(valType(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z);
}

template <typename valType> 
inline valType yaw
(
    detail::tquat<valType> const & q
)
{
    return asin(valType(-2) * (q.x * q.z - q.w * q.y));
}

我真的不确定这是您想要的,但从glm::gtx::四元数:

inline valType roll
(
    detail::tquat<valType> const & q
)
{
    return atan2(valType(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z);
}

template <typename valType> 
inline valType pitch
(
    detail::tquat<valType> const & q
)
{
    return atan2(valType(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z);
}

template <typename valType> 
inline valType yaw
(
    detail::tquat<valType> const & q
)
{
    return asin(valType(-2) * (q.x * q.z - q.w * q.y));
}

这有点难理解你打算做什么,问题是什么…所以你得到三个弧度角,你想把它们转换成度?以弧度表示的每个角度乘以180/π,得到以度表示的角度。@AkiSuihkonen我打算将四元数转换为度或弧度(因为两者之间的转换相当简单)。@Jesper Well,我知道如何进行转换,但我有一个问题,从四元数到弧度的可靠转换。你认为四元数转化为弧度的意思是什么?这有点难理解你打算做什么,问题是什么…所以你在弧度上有三个角度,你想把它们每个都转换成度吗?以弧度表示的每个角度乘以180/π,得到以度表示的角度。@AkiSuihkonen我打算将四元数转换为度或弧度(因为两者之间的转换相当简单)。@Jesper Well,我知道如何进行转换,但我有一个问题,从四元数到弧度的可靠转换。你认为四元数转化为弧度的含义是什么?