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

Angle axis

Quaternions are often created using an axis of rotation and an angle. A rotation about an axis by θ can be represented on a sphere as any directed arc whose length is on the plane perpendicular to the rotation axis. Positive angles yield a counterclockwise rotation around the axis.

Create a new file, quat.cpp. Implement the angleAxis function in quat.cpp. Don't forget to add the function declaration to quat.h:

#include "quat.h"

#include <cmath>

quat angleAxis(float angle, const vec3& axis) {

    vec3 norm = normalized(axis);

    float s = sinf(angle * 0.5f);

    return quat(norm.x * s,

                norm.y * s,

                norm.z * s,

                cosf(angle * 0.5f)

    );

}

Why ? A quaternion can track two full rotations, which is 720 degrees. This makes the period of a quaternion 720 degrees. The period of sin/cos is 360 degrees. Dividing θ by 2 maps the range of a quaternion to the range of sin/cos.

In this section, you learned how the angle and axis of a rotation are encoded in

a quaternion. In the next section, you will learn how to build an angle and an axis

for the rotation between two vectors and encode that into a quaternion.

主站蜘蛛池模板: 浮梁县| 南川市| 辽宁省| 宜春市| 宜君县| 宣汉县| 丁青县| 盐源县| 资溪县| 溧阳市| 固阳县| 新和县| 韶关市| 嘉定区| 阿勒泰市| 石林| 伊金霍洛旗| 侯马市| 绍兴市| 临安市| 商南县| 甘孜县| 扶余县| 马龙县| 西和县| 永定县| 敦煌市| 江源县| 彭泽县| 修武县| 澄迈县| 安康市| 拉孜县| 富民县| 平远县| 蒲江县| 扶绥县| 栾川县| 靖安县| 靖宇县| 庄浪县|