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

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.

主站蜘蛛池模板: 韶山市| 桐城市| 柳河县| 汉沽区| 昭通市| 邓州市| 凤城市| 隆安县| 通榆县| 建始县| 诸暨市| 孙吴县| 白水县| 临漳县| 阿城市| 雅江县| 卓尼县| 库伦旗| 惠来县| 墨玉县| 靖安县| 寿光市| 如皋市| 安义县| 合肥市| 湛江市| 临沭县| 鄂温| 金乡县| 绥德县| 石阡县| 益阳市| 江口县| 汝城县| 大田县| 铁力市| 黔南| 宁乡县| 化隆| 常宁市| 尚义县|