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

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.

主站蜘蛛池模板: 大埔县| 金溪县| 宜兰市| 吴桥县| 运城市| 宝山区| 界首市| 抚松县| 镇安县| 米易县| 新干县| 奇台县| 新郑市| 张北县| 应城市| 东平县| 大余县| 大埔区| 项城市| 绩溪县| 民权县| 伊吾县| 额尔古纳市| 乳源| 盐城市| 明星| 喀喇| 营山县| 吴川市| 盐源县| 于都县| 易门县| 昔阳县| 平度市| 徐水县| 建始县| 孟连| 新沂市| 隆昌县| 高阳县| 寿宁县|