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

Normalizing vectors

A vector with a length of 1 is called a normal vector (or unit vector). Generally, unit vectors are used to represent a direction without a magnitude. The dot product of two unit vectors will always fall in the -1 to 1 range.

Aside from the 0 vector, any vector can be normalized by scaling the vector by the inverse of its length:

  1. Implement the normalize function in vec3.cpp. Don't forget to add the function declaration to vec3.h:

    void normalize(vec3 &v) {

        float lenSq = v.x * v.x + v.y * v.y + v.z * v.z;

        if (lenSq < VEC3_EPSILON) { return; }

        float invLen = 1.0f / sqrtf(lenSq);    

        v.x *= invLen;

        v.y *= invLen;

        v.z *= invLen;

    }

  2. Implement the normalized function in vec3.cpp. Don't forget to add the function declaration to vec3.h:

    vec3 normalized(const vec3 &v) {

        float lenSq = v.x * v.x + v.y * v.y + v.z * v.z;

        if (lenSq < VEC3_EPSILON) { return v; }

        float invLen = 1.0f / sqrtf(lenSq);

        return vec3(

            v.x * invLen,

            v.y * invLen,

            v.z * invLen

        );

    }

The normalize function takes a reference to a vector and normalizes it in place. The normalized function, on the other hand, takes a constant reference and does not modify the input vector. Instead, it returns a new vector.

主站蜘蛛池模板: 马边| 平舆县| 富蕴县| 佛学| 定安县| 新安县| 白河县| 张家港市| 桦甸市| 拜城县| 武陟县| 中西区| 全南县| 永年县| 广宁县| 淳安县| 鄂伦春自治旗| 文昌市| 思茅市| 丰台区| 衡水市| 乐安县| 天等县| 库伦旗| 灵武市| 武汉市| 涞水县| 乐亭县| 定日县| 衡东县| 永登县| 女性| 怀仁县| 林西县| 乌兰县| 揭阳市| 敦煌市| 马公市| 云阳县| 曲沃县| 汶川县|