三维旋转真的很容易
2024-01-28 20:08:35
旋转,是计算机世界里最基本和最常用的空间操作。而我们生活的三维空间,一个简单的旋转,动辄就得需要3个甚至更多个参数来把完整的变换记录下来。这样一看,三维空间的旋转似乎有些难点。但是今天,我们的重点,就是去给这一切降温!我们将会发现,三维旋转可以被表示为很多种不同的方式,每种方式的优缺点各不其同,适用不同的情况。那么就让我们从程序开发的角度,来重新审视一下四种最为常见的三维旋转方式:四元数、欧拉角、角轴制和旋转矩阵。
旋转方式,你今天有几个选择
1. 四元数
这种旋转方式,显然是四个数学符号就可以实现,如果我们再结合上另外一项已知的,也可以是未知的,那么我们就可以轻松的表示任意一个三维旋转。作为二元组的四元组,不能仅凭一组数值就可以做出独一无二的判别,但对于我们来说,这并不是一个需要急着解决的故障。四元数的优点,是这种方式可以以一个非常简洁的模式来将任意的三维旋转轻松记录,但是,这种方式并不是容易进行和理解的。因为它要求我们利用它自己的算法和公式,进而求解出我们真正想要的效果。
2. 欧拉角
一种有着三个参数的旋转方式,一般上,我们比较能够理解和察觉到它们的意思。我们基本上可以认为,欧拉角把旋转分为三个部分,分别是: 绕 x 轴的旋转、绕 y 轴的旋转、绕 z 轴的旋转。这三个旋转我们可以任选其一作为我们所谓的初始轴,剩余的两个将构成次序的旋转。这并不是一个很大的问题,但对我们真正做出选择时,应当要考虑到这个区别。因为这种方式在空间上还是有着一个局限的。欧拉角的优点是,它非常容易被数学和程序所理解和实现。
3. 角轴制
最基本也最容易被理解的旋转方式之一。它的表现方式是对旋转位置的和记录,并且对三维空间进行定位。我们对它的使用通常建立在轴与夹角上。当然,某些情况下,其中一个轴可以是任选其一的,因为 360 度旋转后所获得的仍然是相同的轴,这种情况下,指定一个轴而不是另外两个中的任一个作为初始轴就是有必要的了。角轴制的优点,或许就在于它的简洁和清晰吧。但这并不是它唯一可用的优点,因为它的计算也是非常简单的,同时也拥有着最高的准确率。
4. 旋转矩阵
表示和记录三维旋转的最后一种方式。这是一种 3 x 3 的矩阵,它可以记录下任何一种的三维旋转。不用对这种方式作过多介绍,因为我们现在想要阐述的是它三个主轴:第一个轴控制 x 轴,第二个轴控制 y 轴,第三个轴控制 z 轴。只需要三个轴就可以组成一个旋转矩阵。而且,不管是选择哪一个轴作为初始轴,基本都大同小异。旋转矩阵这种方式也有着自己的优点,例如精确度极高,高至小数点以下 9 位,足够我们一般状况应用。
5.总结
对于三维空间的旋转,不同的记录方式各有千秋。倘若是渲染和视口方面的话,四元数或欧拉角都相对更为合适。技术方面,角轴制和旋转矩阵相对更加严谨。另外,虽然这种方式的灵活用途是十分让人欣慰的,但这并不意味着,这种方式就是所有其他方式的结合体。它的结果,可能还需要取决于我们想要做出何种形式的旋转,最适合,我们就选用哪一种。我们可以灵活的去组合这些方式。通过不同的组合,也就意味着我们是可以自由选择我们要根据什么方式来构建旋转。