相关疑难解决方法(0)

旋转矩阵之间的插值

我有2个旋转矩阵(让我们称之为A和B),其中:

A = 1  0  0
    0  0 -1
    0  1  0
Run Code Online (Sandbox Code Playgroud)

B = -1  0  0
     0  0 -1
     0 -1  0
Run Code Online (Sandbox Code Playgroud)

这基本上只是一个旋转,相机旋转在后面看自己.显然,我不能直接在矩阵中插值,因为它看起来很奇怪.我已经尝试将矩阵转换为欧拉角,产生2组X,Y,Z角,并试图根据X,Y,Z角的每个分量之间的最小距离确定使用哪个角.这肯定会产生我想要的那种旋转,但是我想不出一个合适的方法来确定插入哪个角度,因为有时导致最小误差的角度组会导致围绕错误的轴/轴旋转.我也尝试了四元数,但这基本上给了我相同的结果.谁能指出我正确的方向?

opengl interpolation rotation matrix

12
推荐指数
2
解决办法
7268
查看次数

Android方向传感器的奇怪行为

目前,我正在尝试使用方向传感器值使用getRotation()方法旋转3D立方体.当Android设备旋转到某些边界以上时,会观察到一些意外行为.例如,如果我让设备'站起来','roll'的价值就变得疯狂了.

此外,我正在经历类似于所谓的万向节锁定的现象.唯一的区别是,即使在将传感器值应用于3D旋转之前,我也遇到了这个问题.当我尝试通过仅围绕"俯仰"轴旋转设备来改变"俯仰"值时,"偏航"值也会根据俯仰的旋转而改变.这对我来说似乎完全不合理.

有人能帮帮我吗?我在这个问题上坚持了一个月.

android rotation sensor accelerometer orientation

9
推荐指数
1
解决办法
1万
查看次数

从四元数到欧拉角以及反向的错误转换

我正在将角度轴表示形式转换为欧拉角。我决定检查并确保从转换中得到的欧拉角会回到原始的轴角。我打印出值,但它们不匹配!我已经阅读了http://forum.onlineconversion.com/showthread.php?t=5408http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles以及本网站上的类似转换问题。

在下面的代码中,我从角度“ angle”和轴(rx,ry,rz)开始,然后将其转换为四元数(q0,q1,q2,q3)。我将四元数转换为欧拉角(滚动,俯仰,偏航)。然后要检查它,我将(roll,pitch,yaw)转换为cAngle和(cRx,cRy,cRz)的轴角。然后,我对(滚动,俯仰,偏航)进行一些边界检查,以将数字保持在-pi和pi之间,然后将它们打印出来。应该是cAngle = angle和(cRx,cRy,cRz)=(rx,ry,rz),但这两个都是错误的。

我相信旋转是常见的Z * Y * X顺序。我的数学有问题吗?我打算最终在俯仰为0或PI时添加特殊情况,如http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/,但现在我认为问题是独立的。

        //input is angle 'angle' and axis '(rx,ry,rz)'

        //convert rx,ry,rz, angle, into roll, pitch, yaw
        double q0 = Math.Cos(angle / 2);
        double q1 = Math.Sin(angle / 2) *Math.Cos(rx);
        double q2 = Math.Sin(angle / 2) * Math.Cos(ry);
        double q3 = Math.Sin(angle / 2) * Math.Cos(rz);
        double roll = Math.Atan2(2 * (q0 * q1 + q2 * q3), 1 - 2 * (q1 * q1 + q2 …
Run Code Online (Sandbox Code Playgroud)

math angle rotation quaternions

4
推荐指数
1
解决办法
6099
查看次数

Euler <=> Quaternion之间的转换就像在Unity3d引擎中一样

我已经使用了两个例子(也来自这个网站),但结果与Unity说的结果不一样.

Quaternion.Euler和.eulerAngles是Unity函数.FromQ不执行奇点检查,FromQ2确实如此.

结果:

eulers = (100,55,-11):
Quaternion.Euler(eulers) == (0.6, 0.4, -0.4, 0.5)
ToQ(eulers)); == (0.5, -0.4, 0.2, 0.7) // 0.5, -0.4 right but in wrong order

FromQ(ToQ(eulers)) == (55.0, 100.0, -11.0)
FromQ2(ToQ(eulers)) == (-55.5, -6.3, 71.0) // something right

Quaternion.Euler(eulers).eulerAngles == (80.0, 235.0, 169.0)
FromQ2(Quaternion.Euler(eulers)) == (65.8, 1.9, 99.8)
ToQ(eulers).eulerAngles == (70.0, 286.9, 341.4)
FromQ(Quaternion.Euler(eulers)) == (-65.8, 76.0, 4.6)

It must be:
FromQ() = FromQ2() = .eulerAngles,
ToQ() = Quaternion.Euler()
Run Code Online (Sandbox Code Playgroud)

代码在这里:http://pastebin.ru/eAlTHdYf

任何人都可以更正此代码?我需要的代码将返回与Unity函数返回的值相同的值.

UPDATE

这是固定代码:http://pastebin.com/riRLRvch …

c# math quaternions euler-angles unity-game-engine

3
推荐指数
1
解决办法
2万
查看次数