官术网_书友最值得收藏!

Conjugate and inverse

Games mostly use normalized quaternions, which comes in handy when inverting quaternions. The inverse of a normalized quaternion is its conjugate. The conjugate

of a quaternion flips its axis of rotation:

  1. Implement the conjugate function in quat.cpp and remember to declare the function in quat.h:

    quat conjugate(const quat& q) {

        return quat(

            -q.x,

            -q.y,

            -q.z,

             q.w

        );

    }

  2. The proper inverse of a quaternion is the conjugate divided by the squared length of the quaternion. Implement the quaternion inverse function in quat.cpp. Add the function declaration to quat.h:

    quat inverse(const quat& q) {

       float lenSq = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w;

       if (lenSq < QUAT_EPSILON) {

          return quat();

       }

       float recip = 1.0f / lenSq;

       return quat(-q.x * recip,

                   -q.y * recip,

                   -q.z * recip,

                    q.w * recip

       );

    }

If you need to find out whether a quaternion is normalized or not, check the squared length. The squared length of a normalized quaternion is always 1. If a quaternion is normalized, its conjugate and inverse are the same. This means you can use the faster conjugate function, instead of the inverse function. In the next section, you will learn how to multiply two quaternions together.

主站蜘蛛池模板: 柏乡县| 抚远县| 梓潼县| 日喀则市| 津市市| 永年县| 上饶市| 通渭县| 奉贤区| 榕江县| 响水县| 焉耆| 合江县| 吉林省| 沾化县| 宜宾县| 西安市| 微博| 汤原县| 靖安县| 饶平县| 岳普湖县| 高雄县| 太保市| 卓尼县| 嵩明县| 锦屏县| 莒南县| 杂多县| 桐梓县| 丰宁| 建水县| 太康县| 濮阳市| 绥棱县| 田东县| 嘉荫县| 乌审旗| 怀安县| 玛曲县| 应城市|