Vector2.Normalize 函数,对对角线输出感到困惑

Posted

技术标签:

【中文标题】Vector2.Normalize 函数,对对角线输出感到困惑【英文标题】:Vector2.Normalize function, confused about diagonal output 【发布时间】:2014-08-30 14:01:37 【问题描述】:

我的问题是使用 Vector2.Normalize 函数时(特别是在 XNA 中)

这可能是我对矢量数学的理解不好,但据我了解,规范化为您提供了一个方向或梯度。

如果您在单个方向(例如上下左右)应用速度,它只会返回特定轴的正数或负数 1,以及对我有意义的方向。

但是,如果我要求对沿对角线移动的向量 2 进行归一化,请说每 1 个单位向右移动 1 个单位。它返回这个。

X:0.7071068 Y:0.7071068

这让我感到惊讶,因为我认为它会更像 [X:0.5 Y:0.5]

我的理由是什么?如果一个方向的绝对值是 1,而另一个方向的绝对值是 1,那么以 45 度角移动不应该产生类似于 0.5 的中点吗?

添加的 0.5 和 0.5 不会产生 1 的大小,我认为归一化向量应该遵守吗?

我不知道我是否可以使用 DYDX 之类的东西为自己找到答案,因为它只是一个方向,而不是具有已知终点的某条线。

【问题讨论】:

对向量进行归一化会保持方向但将其长度设置为 1,所以我不明白为什么这是错误的。 0.707 是 1/sqrt(2)。因此长度为 sqrt(1/sqrt(2)**2 + 1/sqrt(2)**2) = 1。 这里的编程问题在哪里?如果您对归一化方向向量有疑问,那么您最好阅读一些相关信息并在 math.stackexchange 上提问。如果你有一些由当前向量表示引起的编程问题 - 用代码、期望的和当前的结果来描述它。 抱歉,现在我对它背后的数学有了更好的理解,我意识到它更适合你所说的数学交流。我之前没有找到合适的资源。在我理解它给出的答案之前,我不确定 Vector2.Normalize 方法处理规范化的方式是否与标准数学中的方式有​​所不同。 【参考方案1】:

这是一个视觉辅助。归一化总是使向量的长度为 1.0。所以图像中的 3 个向量的长度都是 1.0。对角向量的x&y坐标明显大于0.5f

【讨论】:

以上是关于Vector2.Normalize 函数,对对角线输出感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

numpy奇异值分解,广义逆矩阵与行列式

R语言使用upper.tri函数lower.tri函数diag函数改变matrix矩阵上三角形下三角形对角线的数值

C语言函数实验

MATLAB矩阵处理——2.2矩阵变换

python使用numpy中的diagonal函数获取2D numpy数组的对角线元素使用numpy中的diagonal函数和sum函数获取2D numpy数组的迹(matrix trace)

Numpy—— 线性代数相关函数