加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 什么时候归一化矢量?

发布时间:2020-12-15 18:08:41 所属栏目:百科 来源:网络整理
导读:我正在学习XNA,几乎在 http://creators.xna.com/en-US/发现的所有教育套件.我总是看到一个向量的Normalize()的调用.我知道规范化基本上将矢量转换为单位长度,所以它给出的是方向. 现在我的问题是什么时候正常化,究竟是什么帮助我.我正在做2D编程,所以请用2D
我正在学习XNA,几乎在 http://creators.xna.com/en-US/发现的所有教育套件.我总是看到一个向量的Normalize()的调用.我知道规范化基本上将矢量转换为单位长度,所以它给出的是方向.

现在我的问题是什么时候正常化,究竟是什么帮助我.我正在做2D编程,所以请用2D的概念解释,而不是3D.

编辑:这是XNA套件中的代码,为什么正规化被调用?

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;

}

解决方法

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

没有规范运动矢量,则对角运动将比仅仅X或Y运动更快.正规化,速度在所有8个方向是相同的,我猜是游戏要求的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读