何时归一化矢量?

Mik*_*iaz 10 c# xna

我正在学习XNA以及http://creators.xna.com/en-US/上发现的几乎所有教育工具包.我总是在向量上看到对Normalize()的调用.我理解,normalize基本上将向量转换为单位长度,所以它给出的只是方向.

现在我的问题是何时进行标准化以及它对我有什么帮助.我正在进行2D编程,因此请在2D概念而不是3D中进行解释.

编辑:这是XNA工具包中的代码,为什么要调用Normalize?

if (currentKeyboardState.IsKeyDown(Keys.Left) ||
            currentGamePadState.DPad.Left == ButtonState.Pressed)
        {
            catMovement.X -= 1.0f;
        }
        if (currentKeyboardState.IsKeyDown(Keys.Right) ||
            currentGamePadState.DPad.Right == ButtonState.Pressed)
        {
            catMovement.X += 1.0f;
        }
        if (currentKeyboardState.IsKeyDown(Keys.Up) ||
            currentGamePadState.DPad.Up == ButtonState.Pressed)
        {
            catMovement.Y -= 1.0f;
        }
        if (currentKeyboardState.IsKeyDown(Keys.Down) ||
            currentGamePadState.DPad.Down == ButtonState.Pressed)
        {
            catMovement.Y += 1.0f;
        }


        float smoothStop = 1;


        if (catMovement != Vector2.Zero)
        {
            catMovement.Normalize();
        }

        catPosition += catMovement * 10* smoothStop;
Run Code Online (Sandbox Code Playgroud)

}

Det*_*mar 10

在您的示例中,键盘按下可以让您在X或Y或两者中移动.在X和Y的情况下,当您同时向右和向下按压时,您的运动是对角线.但是,仅在X或Y中的移动给出了长度为1的向量,对角线向量长于1.也就是说,大约是1.4(2的平方根).

如果不对运动矢量进行标准化,则对角线运动将比仅X或Y运动更快.通过标准化,所有8个方向的速度相同,我猜这是游戏所要求的.