【发布时间】:2011-09-26 00:14:09
【问题描述】:
我在 3D 空间中有一个 3D 对象,该对象以某个方向定向。我怎么知道它已经从它的初始旋转 q(欧拉角:0、0、0)只在任何轴上任意旋转了 15 度。例如,X 轴旋转 4*15 度,Y 轴旋转 7*15 度,Z 轴旋转 13*15 度。我怎样才能检测到这一点?
我试图从对象的旋转矩阵中获取欧拉角,但它似乎只有在我只在一个轴上旋转时才能正确检测到这种情况。如果我开始混合 X、Y 和 Z 轴 15 度旋转,欧拉角就会变得混乱。
我 100% 确定对象仅旋转了 15 度。
【问题讨论】:
-
我很确定 any 旋转矩阵任意接近沿坐标轴旋转 15° 的乘积。您能否提供一些有关该问题的背景信息,以便我们可以引导您走向不同的道路?
-
不,不是。 360 可以被 15 整除。
-
@iosiki:没关系。如果先旋转 15°X,然后旋转 15°Y,再旋转 15°Z,您会得到一个既不是围绕 X 也不是围绕 Y 也不是围绕 Z 的旋转。让我们将此旋转称为 XYZ。现在我声明,如果你进行任何旋转,就会有一个任意接近它的“单词”(例如 XXYZYYZYXYYZ)。实际上,我很确定我的陈述是正确的,这类似于产生 Banach-Tarski 悖论的论点。正如你所说,在 2D 中这是错误的。
-
@ioski:如果你能找到两个词(比如 A=XYZ 和 B=XZY,这应该可以工作),它们代表围绕两个独立轴的 非理性角度 的两个旋转,那么我的陈述是正确的(例如参见irregularwebcomic.net/2339.html)
-
我们通过执行 24*X (24*15 = 360)、执行 24*Y 和执行 24*Z 来开始旋转。我们不应该通过任意顺序执行 24*X + 24*Y + 24*Z 来开始旋转吗?现在,我想检测是否可以通过该公式形成任意旋转。
标签: c++ math object 3d rotation