-->

什么是需要进行归一化矢量?(What is the need for normalizing a v

2019-06-23 09:37发布

想了解向量多一点。

什么是需要进行归一化矢量?

如果我有一个向量,N =(X,Y,Z)

什么你真的当你规范化得到它 - 我让你必须分配X /理念| N | Y / | N | &Z / | N |。 我的问题是,为什么我们做这个事情,我的意思是,我们什么摆脱这个方程的?

是什么意思还是这样做的“内部”的目的。

一个数学问题的一点,我很抱歉,但我真的不清楚这个话题。

Answer 1:

这有点像问为什么我们乘号。 它配备了所有的时间。

我们使用的笛卡尔坐标系是一个标准正交基(由作为相互正交的长度1的矢量,依据意味着任何载体可以通过这些载体的独特组合来表示)中,当要旋转的基础上(其中,当你环顾四周)使用矩阵,它的行和列正交向量会出现在视频游戏机制。

一旦你开始用线性代数中的矩阵玩弄够了你将要正交向量。 有太多的例子,只是他们的名字。

在一天结束时,我们并不需要标准化的矢量(以同样的方式,因为我们不需要汉堡包,我们可以生活在没有他们,但谁去?),但对类似的模式v / |v| 出现如此频繁,人们决定给它一个名字和一个特殊的符号(A ^在矢量意味着它是一个标准化的矢量)作为一种快捷方式。

归一化的矢量(也称为单位矢量)是,基本上,生活中的事实。



Answer 2:

对于任何向量V = (x, y, z) |V| = sqrt(x*x + y*y + z*z) |V| = sqrt(x*x + y*y + z*z)给出向量的长度。

当我们标准化的载体,我们实际计算V/|V| = (x/|V|, y/|V|, z/|V|) V/|V| = (x/|V|, y/|V|, z/|V|)

这是很容易看到,归一化向量长度为​​1。这是因为:

| V/|V| | = sqrt((x/|V|)*(x/|V|) + (y/|V|)*(y/|V|) + (z/|V|)*(z/|V|))
          = sqrt(x*x + y*y + z*z) / |V|
          = |V| / |V|
          = 1

因此,我们可以调用归一化的向量为单位向量(即矢量与单位长度)。

任何载体,归时,只改变其大小,不改变其方向。 另外,在相同的方向指向每一矢量,被归一化到相同的载体(因为幅度和方向唯一地定义一个向量)。 因此,单元载体可用于提供方向极为有用。

然而,注意,所有上述的讨论是3个维直角坐标系(x, y, z) 但是,我们真的由笛卡尔坐标是什么意思?

事实证明,以确定在三维空间中的向量,我们需要一些参考方向。 这些参考方向规范地称为I,J,K(或I,J,K与他们小瓶盖-称为“I上限”,“J帽”和“k帽”)。 我们认为,作为任何向量V = (x, y, z)可以实际然后被写为V = xi + yj + zk 。 (注:我将不再由盖给他们打电话,我就打电话给他们I,J,K)。 I,J,和k是在X,Y的单位向量和Z方向上并且它们形成一组相互正交的单位矢量。 他们都是直角坐标几何的基础。

还有其他形式的坐标(例如圆柱形和球形坐标),并且虽然它们的坐标不直接理解为(x, y, z)他们也由一组其形成3个相互正交的单位矢量的基础成3个坐标相乘,以产生一个载体。

因此,上述讨论清楚地说,我们需要的单位向量来定义其他的载体,但你为什么要在乎?

因为有时候,仅有大小事宜。 这时候,你使用“常规”号(像4或1/3或3.141592653 - 不,所有你怪胎强迫症,我不会把皮那里 - 那须留终止小数,只是因为我是邪恶的化身)。 你不会希望在一个讨厌的方向扔了,你会吗? 我的意思是,它真的有意义地说,我想朝西4千克西瓜? 除非你有一些疯狂的狂热,当然。

其他时候,只有方向事项。 你只是不小心的幅度,或幅度只是太大捉摸(像无穷大,只是没有人真正知道什么无穷真的是 - 所有冰雹大无限,对他有无限无穷大......对不起,有一点忘乎所以那里)。 在这种情况下,我们使用向量正常化。 例如,它没有任何意义说,我们必须面对的4公里北线。 它更有意义说,我们有北向的线路。 那你怎么办呢? 你摆脱了4公里。 你破坏程度。 所有你剩下的就是北(和凛冬将至)。 这样做往往不够,你将不得不放弃一个名称和符号来你在做什么。 你不能只是把它称为“忽略大小”。 这太粗鲁。 你是个数学家,所以你把它叫做“正常化”,你给它的“上限”(可能是因为你想要去参加一个聚会,而不是被卡住载体)的符号。

顺便说一句,因为我提到的直角坐标系,这里的强制性XKCD:



Answer 3:

读陀游戏引擎 文档有关单位向量 ,标准化和积真的有很大的意义。 下面是文章:

单位向量

好了,我们知道一个向量是什么。 它有一个方向和大小。 我们也知道如何在陀使用它们。 下一步是了解单位矢量。 与长度为1的幅度的任何载体被认为是一个单位矢量。 在2D,想象画一个半径的圆。 该圆包含在存在2种尺寸的所有单位矢量:

那么,什么特别之处单位向量? 单位向量是惊人的。 换言之,单位矢量有几个,非常有用的特性。

等不及要知道更多关于单位向量的奇妙特性,但一步一个脚印。 那么,如何在一个单位向量从常规载体产生的?

正常化

采取任何矢量和减少其幅度至1.0,同时保持其方向被称为归一化。 正常化除以它的幅度的矢量的x和y(和z在3D)组件来执行:

var a = Vector2(2,4)
var m = sqrt(a.x*a.x + a.y*a.y)
a.x /= m
a.y /= m

正如你可能已经猜到了,如果矢量具有幅度0(意思是,它不是一个向量但产地也称为空载体),除以零发生和宇宙经过第二大爆炸,除了在反极性,然后再。 其结果是,人类是安全的,但戈多将打印错误。 记得! 矢量(0,0)不能被归!

当然,Vector2的Vector3和已经提供了这样做的方法:

a = a.normalized()

点积

OK,点积矢量数学中最重要的组成部分。 如果没有点积,地震就从未提出过。 这是本教程中最重要的部分,所以一定要正确地把握它。 大多数人都试图了解矢量数学放弃这里,因为,尽管它是多么简单,他们不能从它使头部或尾部。 为什么? 这里的原因,那是因为...

点积需要两个向量,并返回一个标量:

var s = a.x*b.x + a.y*b.y

是的,相当多的是。 通过从x矢量b相乘从向量X。 做相同的Y和添加它在一起。 在3D这几乎是相同的:

var s = a.x*b.x + a.y*b.y + a.z*b.z

我知道,这是完全没有意义! 你甚至可以用内置的功能做到这一点:

var s = a.dot(b)

这两个载体的顺序并不重要, a.dot(b)返回相同的值作为b.dot(a)

这是绝望的开始和书籍和教程告诉你这个公式:

而你知道是时候放弃制作的3D游戏或复杂的2D游戏。 这么简单的东西怎么能这么复杂吗? 其他人会不得不使下塞尔达或使命召唤。 自上而下的RPG游戏看上去不那么糟糕。 是的,我听到有人在做了漂亮的意志与Steam上的一个...

因此,这是你的时刻,这是你的时代的光芒。 不要放弃! 在这一点上,本教程将采取急转弯和重点是什么使积有用。 这就是为什么它是非常有用的。 我们将重点逐一在用例的点积,与现实生活中的应用。 没有更多的公式,没有任何意义。 一旦你了解它们是什么有用的公式才有意义。

站在一边的点积的第一个有用的和最重要的属性是检查什么端的东西在看。 让我们想象一下,我们有任何两个向量a和b。 任何方向或大小(均未原点)。 不要紧,他们是什么,但让我们想象一下,我们计算出它们之间的点积。

var s = a.dot(b)

该操作将返回一个浮点数(但因为我们是在矢量的世界里,我们称之为标量,使用期限将继续从现在起)。 这个数字将告诉我们的情况如下:

如果该数量大于零,两者都看往相同的方向(它们之间的夹角<90°度)。 如果该数量小于零,两者都看往相反的方向(在它们之间的角度为> 90°度)。 如果数是零,矢量被成形在L(它们之间的角度为90°度)。

因此,让我们觉得一个真正的用例场景。 想象一下,蛇会穿过一片森林,再有就是在附近的敌人。 我们怎样才能快速知道如果敌人已经看到发现蛇? 为了发现他,敌人必须能够看到蛇。 比方说,那么:

蛇处于位置A.敌人在位置B.敌人面朝方向矢量F.

所以,让我们创建一个新的矢量BA,从保护装置(B)走向Snake(A),减去二:

var BA = A - B

理想的情况是,如果保护正在寻找奔蛇,使眼对眼的接触,它会做在同一个方向矢量BA。

如果F和BA之间的点积大于0,则蛇将被发现。 这是因为我们将能够告诉大家,保护迎向他:

if (BA.dot(F) > 0):
    print("!")

好像蛇是安全的,到目前为止。

偏袒单位矢量好了,现在我们知道,两个向量的点积将让我们知道他们正在朝同一侧,两侧或只是互相垂直。

这适用于所有矢量是相同的,无论大小,以便单位向量不例外。 然而,使用相同的属性与单位矢量产生一个更有趣的结果,作为添加额外的属性:

如果两个矢量的面朝确切相同的方向(平行于彼此,在它们之间角度为0°),将得到的标量是1。如果两个矢量平行面朝确切相反的方向(向对方,但它们之间的角度为180°),得到的标量是-1。 这意味着,单位矢量之间的点积总是的1和-1之间的范围内。 如此反复...

如果他们的角度为0°的点积为1。如果他们的角度为90°,那么点积为0。如果他们的角度为180°,则点积是-1。 呃..这是奇怪的熟悉......见过这个......在哪里?

让我们两个单位向量。 第一个是指向上方,第二太多,但我们将它从最多(0°)倒(180°度)一路旋转...

虽然绘制所产生的标量!

啊哈! 这一切都有道理,现在,这是一个余弦函数!

我们可以这么说,那么,作为一个规则...

两个单位矢量之间的点积为这两个向量之间的角度的余弦值。 因此,获得两个向量之间的角度,我们必须做到:

var angle_in_radians = acos( a.dot(b) )

这是什么用呢? 那么直接获取的角度可能不是有用,但只能够告诉角度以供参考是非常有用的。 一个例子是在运动学特征的演示,当字符在某个方向上移动,然后我们遇到的对象。 如何判断我们打什么楼?

通过与先前计算的角比较正常的碰撞点的。

这样做的好处是,同样的代码在3D完全相同,而无需修改。 矢量数学,在一个大便宜,尺寸,数量无关,因此添加或移除轴只增加了很少的复杂性。



Answer 4:

你正在其长度1 - 发现在相同的方向指向的单位向量。

这是用于各种目的有用的,例如,如果你把一个向量的点积与您在单位矢量的方向矢量的组成部分的长度的单位矢量。



Answer 5:

法线都应该被用作唯一的方向矢量。 它们用于照明计算,这需要归一化的法线矢量。



Answer 6:

在机器学习和深入学习,我们需要标准化向量,因为梯度下降快速收敛



文章来源: What is the need for normalizing a vector?