gpt4 book ai didi

WPF 3D : How to convert a single AxisAngleRotation3D into separate AxisAngleRotation3D?

转载 作者:行者123 更新时间:2023-12-02 04:13:54 27 4
gpt4 key购买 nike

我有一个 3D viewport,它使用 WPF 3D 工具的 TrackBall 通过鼠标旋转对象。结果,我得到了一个 AxisAngleRotation3D,其轴向量为 (0.5, 0.2, 0.6),角度为例如35. 很好。

作为替代方案,我想做的是让用户能够通过单个轴(即 x、y、z)旋转对象。因此,如果对象围绕 (0.5, 0.2, 0.6) 的轴旋转 35 度,我如何将其转换为围绕每个轴的三个旋转,即。 Xangle 表示向量 (1, 0, 0),Yangle 表示向量 (0, 1, 0),Zangle 表示向量 (0, 0, 1)。

我还需要一种方法将它们转换回单个 AxisAngleRotation3D 对象。

编辑:

我在 http://www.gamedev.net/reference/articles/article1095.asp 找到了一些东西.我学到的一件事是,我可以轻松地从单独的 AxisAngleRotation3D 中获得(组合的)四元数。例如,

        private AxisAngleRotation3D _axisX = new AxisAngleRotation3D();
private AxisAngleRotation3D _axisY = new AxisAngleRotation3D();
private AxisAngleRotation3D _axisZ = new AxisAngleRotation3D();
...
_axisX.Axis = new Vector3D(1, 0, 0);
_axisY.Axis = new Vector3D(0, 1, 0);
_axisZ.Axis = new Vector3D(0, 0, 1);
...
Quaternion qx = new Quaternion(_axisX.Axis, _axisX.Angle);
Quaternion qy = new Quaternion(_axisY.Axis, _axisY.Angle);
Quaternion qz = new Quaternion(_axisZ.Axis, _axisZ.Angle);
Quaternion q = qx * qy * qz;

这很好。现在,问题是我该如何做相反的事情?那么,对于给定的 q,如何找出 qx、qy、qz?

最佳答案

您可以将其转换为矩阵,然后再转换回三个独立的旋转表示形式。您可以在网上找到这两种转换的公式。您还可以通过将其写下来并在纸上求解方程式来优化它,从而可能更快地得出公式。

但是,我建议永远不要用三个数字表示旋转,这是由于此实现和数字不稳定性导致的奇异性。请改用四元数。

关于WPF 3D : How to convert a single AxisAngleRotation3D into separate AxisAngleRotation3D?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com