四元数的学习笔记

        在平时的开发中,经常会遇到旋转的操作,也因此经常会接触到四元数的相关概念。但是,这个概念说难不难,但是理解起来也挺费劲的。

        我经常会使用到四元数,但是每次使用时都会查资料,当时理解了概念,但是过两天又忘记了,当再次使用的时候,又要重新查资料。挺蛋疼。于是就写一篇博客,关于四元数,算是加强印象。

        先放一篇对四元数讲解的非常详细的博客:

            https://blog.csdn.net/candycat1992/article/details/41254799

        我看过这篇博客之后,对四元数又作了一些简要的提炼。下面只描述我 是如何理解四元数的。

        四元数的主要作用是用来解决旋转问题的,因此,我们必须知道两个条件,一个是旋转轴(一般是一个归一化向量),一个是旋转的角度,还有一个已知的是我们要旋转的原始顶点 或者 向量。

        这样问题就转化成了3个已知数:

            P : 要旋转的源顶点  或者 向量

            Y:要围绕其旋转的旋转轴(这里用Y来表示是假定我们用Y轴来旋转,易于理解)

            θ: 要旋转的角度

        求出 旋转 之后的 目标 顶点坐标 或者 向量

    面对这个问题。我们要构造出两个四元数,一个四元数与P有关,一个四元数与Y和 θ 有关,其中:

            与P有关的四元数是  在P的顶点坐标后面直接补一个0,简单粗暴,即(P,0)

            与Y和 θ 有关的四元数也不难, 就是 (Y * sin(θ / 2) , cos( θ / 2))

    好了,现在我们两个四元数都构造好了,剩下就是套公式了。也许公式理解起来很头疼,但是我们可以不用管公式的推倒过程,直接记结果,拿起笔直接算好了:

        结果:要求的结果 X = (Y * sin(θ / 2) , cos( θ / 2)) * (P,0) * ( -Y * sin(θ / 2) , cos( θ / 2)

    这是公式,计算出来的结果X其实也是一个四元数,比如(x,y,z,w),这个四元数前三位的值(x,y,z)即是我们所求的旋转过后的点 或者 向量 (具体的如何计算这个公式可以看前面博客提到的那篇博文)


        不过好在,目前我们是信息时代,这些复杂的数学计算就交给计算机去做了。不过它的原理我觉得我们还是有必要去了解的。By the way, 我们平时在用Unity的时候也可以用Unity提供的Api去计算旋转什么的。也很方便。

猜你喜欢

转载自blog.csdn.net/q568360447/article/details/80457195
今日推荐