c# - 将局部四元数旋转转换为全局(陀螺仪)

标签 c# math 3d quaternions euler-angles

我需要一种方法来从局部获取全局引用系中旋转的欧拉角。我正在使用 c#、wpf 3d 和陀螺仪。我在屏幕上有一个地球仪,它应该以与陀螺仪相同的方式移动。由于陀螺仪发送相对于自身的运动,我需要使用四元数来保持对象的状态并更新它,但我被卡住了。如果我执行以下操作:

                var qu=eulerToQ(Gyro.X,Gyro.Y,Gyro.Z);
                GlobalQu = Quaternion.Multiply(qu, GlobalQu);

IT 在一个轴上正确旋转。当我在一个方向上旋转 A,然后在另一个方向上旋转 B 时,物体和陀螺仪的旋转不再在同一方向,因为上述适用于绝对旋转(相对于世界)。

例如:

                    var qu=eulerToQ(KeyboardValue1,KeyboardValue2,KeyboardValue3);
                    GlobalQu = qu;

这是有效的,因为我总是在全局轴上通过键盘增加滚动、俯仰、偏航,即键盘值。陀螺仪在 LOCAL 轴上发送旋转。

切换四元数旋转顺序没有帮助

                    var qu=eulerToQ(Giro.X,Giro.Y,Giro.Z);
                    GlobalQu = Quaternion.Multiply(GlobalQu,qu);

最佳答案

这其实是正确的做法。如果你乘以 globalQuaternion * newQuaternion 你得到全局旋转和 newQuaternion * globalQuaternion 然后你得到局部旋转。我只是在生成四元数时犯了一个错误。

关于c# - 将局部四元数旋转转换为全局(陀螺仪),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281864/

相关文章:

c# - Application.COMAddIns 下标超出范围

c# - TLS 致命 : Handshake Failure

algorithm - 组合问题,房间配置

iphone - iOS 中 opengl 顶点数据的对齐有多重要

r - R 中传单 map 上的 3D 条形图可视化

java - 如何在 Java 中可视化实时 3D 运动?

c# - MVVM:根据模型属性更新ViewModel属性

c# - 创建者更新后无法注册 GattCharacteristicNotificationTrigger 后台任务

math - float 学坏了吗?

java - 通过连续自然数的加法或减法获得一个数