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

  • Game Physics Cookbook
  • Gabor Szauer
  • 331字
  • 2021-04-02 20:27:25

Normalizing

A vector with a magnitude of 1 is a normal vector, sometimes called a unit vector. Whenever a vector has a length of 1, we can say that it has unit length. A normal vector is written as the letter of the vector with a caret symbol on top instead of an arrow, Normalizing. We can normalize any vector by dividing each of its components by the length of the vector:

Normalizing

We never implemented division operators for the vector class. We can rewrite the preceding equation as reciprocal multiplication. This means we can obtain the normal of a vector if we multiply that vector by the inverse of its length:

Normalizing

Getting ready

We are going to implement two functions, Normalize and Normalized. The first function will change the input vector to have a length of 1. The second function will not change the input vector; rather it will return a new vector with a length of 1.

How to do it…

Follow these steps to implement functions which will make a vector unit length or return a unit length vector. These steps utilize reciprocal multiplication.

  1. Declare the Normalize and Normalized functions in vectors.h:
    void Normalize(vec2& v);
    void Normalize(vec3& v);
    
    vec2 Normalized(const vec2& v);
    vec3 Normalized(const vec3& v);
  2. Add the implementation of these functions to vectors.cpp:
    void Normalize(vec2& v) {
       v = v * (1.0f / Magnitude(v));
    }
    
    void Normalize(vec3& v) {
       v = v * (1.0f / Magnitude(v));
    }
    
    vec2 Normalized(const vec2& v) {
       return v * (1.0f / Magnitude(v));
    }
    
    vec3 Normalized(const vec3& v) {
       return v * (1.0f / Magnitude(v));
    }

How it works…

Normalizing works by scaling the vector by the inverse of its length. This scale makes the vector have unit length, which is a length of 1. Unit vectors are special as any number multiplied by 1 stays the same number. This makes unit vectors ideal for representing a direction. If a direction has unit length, scaling it by some velocity becomes trivial.

主站蜘蛛池模板: 石河子市| 日土县| 嘉祥县| 江永县| 来宾市| 报价| 温州市| 六盘水市| 武邑县| 云南省| 西乌珠穆沁旗| 黔东| 广昌县| 武穴市| 兰考县| 蒲城县| 嘉峪关市| 连山| 甘谷县| 广南县| 会同县| 远安县| 揭西县| 台南县| 洪泽县| 建平县| 墨江| 茂名市| 杨浦区| 海安县| 乌鲁木齐县| 怀来县| 澎湖县| 西峡县| 玉门市| 新野县| 大丰市| 曲水县| 盐边县| 新巴尔虎左旗| 彭州市|