如果3D向量表示一个点,那么它怎么有长度?


27

我试图理解向量算术(特别是在Unity引擎中的使用)。我无法弄清楚向量仅代表一个点(位置和方向)如何具有长度(幅度)?

这是否意味着幅度只是其距原点(0,0,0)的距离?还是我错过了什么?


14
考虑标量,也称为数字。它可以表示绝对值,差,百分比等
彼得

1
Normalized上下文中的表示一个新矢量,该矢量保留1的,Direction但具有Magnitude1。即, Normalized通过缩放原始矢量来创建该矢量。
Theraot

@Theraot,非常感谢,这句话对我很有帮助!
Mohammed Noureldin

19
没有。它代表位移。如果将其视为位置矢量,则仅指向某个点,在这种情况下,它表示从(0,0,0)开始的位移。这种位置向量的长度是点到原点的距离。
Polygnome '17

1
@Peter恐怕我不同意你的看法。向量的标准代数定义几乎意味着它不是重点。其通常是有用的,以考虑它是这样,因为位置向量可以被用于代表点,但它们不点。“ 5米”始终是距离(或长度),永远不会是时间或颜色。使用不同的符号通常很有用-我个人永远不会使用(5,5,5)来表示向量,我总是会使用(5,5,5)^ T(T表示转置)或使用适当的列表示形式在支持的地方。因为说向量要点,所以会引入不准确性。
Polygnome '17

Answers:


20

这是否意味着幅度仅仅是距原点(0,0,0)的距离?

文艺青年最爱的答案可能是:是的,你可以把它想象这样的。

但是我不确定这是否会导致错误的理解。


向量不是重点,两者之间有关键的区别!

向量通常表示为“箭头”的事实可能会给人留下错误的印象。实际上,向量不是单个箭头。更准确地说,向量是具有相同长度和方向所有箭头的集合。(即通常是绘的箭头是只是一个代表所有这些箭头的)。但是我不想在这里深入探讨无聊的数学细节。

更重要的是,点和向量之间存在至关重要的区别,当您变换该点或向量时,这在图形编程中就变得显而易见。我对Unity不熟悉,但是从快速浏览文档的过程中,他们正在建模Matrix4x4类中一个点和一个向量之间最重要的区别。它具有两个不同的功能:

大致来说,区别是不翻译向量,而翻译点。想象一下以下4x4矩阵:

1.0   0.0   0.0   1.0
0.0   1.0   0.0   2.0
0.0   0.0   1.0   3.0
0.0   0.0   0.0   1.0

它描述了有关(1,2,3)的翻译。现在,当您具有以下伪代码时

Vector3 tp = matrix.MultiplyPoint (new Vector3(2,3,4));
Vector3 tv = matrix.MultiplyVector(new Vector3(2,3,4));

然后tp将是(3,4,5),惠拉tv仍将是(2,3,4)。平移向量不会改变它(因为如上所述,它是大小和方向相同的所有箭头的集合)。


Unity将Vector3类同时用于矢量点的事实是合理的,但可能会造成混淆。其他库专门区分Point3DVector3D,有时有类似的基础Tuple3D


3
从数学上来说,您确定“矢量是长度和方向相同的所有箭头的集合”是否有意义?听起来您在谈论一些等效类,但是矢量空间并不是我读过的定义为等效类的东西。—无论如何,您都将提出一个非常重要的... ,矢量空间和仿射空间之间的区别,分别是所有矢量/所有点的类型的数学名称。
大约

3
A vector is, in fact, not a single arrow,您是对的,将Vector3表示为单个箭头正好使我感到困惑。+1提及这个关键句子。
Mohammed Noureldin

@vector有多种可能的矢量定义(除了“一些n元组...”以外)。在线性代数中,想象所有箭头的集合,以及(相等!-)关系“具有相同的长度和方向”。通过此关系分解所有箭头的集合,得出等价类。我不想挑剔数学上的细节(我也不是数学家),但希望弄清楚向量不是“以(0,0,0)开头的箭头”。点(...)是:向量没有“位置”。
Marco13年

2
计算机科学对该术语的使用甚至使vector数组或倍数变得更加复杂!在C ++中,您可以std::vector<Vector3>举个例子。一vectorVector秒。
user1118321

啊,所以你的意思是,从仿射空间启动X,你定义任意两点(pq)的内小号X)的最短路径(即微以最小的综合绝对衍生功能)小号: [0,1]→ X使得s(0)= ps(1)= q。然后向量的空间是该组等价类的X)/〜其中小号σ如果∂ 小号 /∂ =∂ σ/∂ 用于所有 ∈] 0,1 [?这是有道理的,尽管我认为您不能将其用作向量的定义,因为差异已经取决于它们。
大约

36

这是否意味着幅度仅仅是距原点(0,0,0)的距离?

就是这样

根据上下文,向量尤其可以表示点(位置),方向和/或速度。

如果具有此变量:

Vector3 mPosition;

它通常表示位置,即它在3d空间中的位置。

如果具有此变量:

Vector3 mDirection;

它通常代表方向。通常,这些向量是单位向量,即长度为1的向量(但并非总是需要)。单位向量和规范化向量是同一件事,它们的长度均为1。这些向量通常与其他向量一起使用以更改其位置。

对向量进行归一化时,会丢失其长度(其大小),但方向保持不变。在某些情况下,您仅需要方向(例如,当您想沿该方向移动对象时),并且向量中的幅度(非单位长度)会引入意外的计算结果。

如果您需要一个法线向量进行单个计算,则可以使用myVec3.normalized,它不会影响myVec3,并且如果您打算经常使用该法线向量,则可能应该创建一个变量:

Vector3 myVec3Normalized = myVec3.normalized;

避免重复调用该normalized方法。

如果您看到变量:

Vector3 mVelocity;

它通常表示力/速度:这些向量表示方向其大小(其长度)很重要。它们也可以用Vector3 mDirection;和表示float mSpeed;

所有这些都针对其本地原点使用,可以是(0,0,0),也可以是其他位置。


4
它破坏了向量中包含的一部分信息,而该信息就是大小。但是方向保持不变。

6
@Eldy更准确地说,要myVec3.normalized返回一个 Vector3,它的方向相同,但幅值为1。myVec3不变
Caleth

4
@ NPSF3000这些将是一个挺举颠簸,对超出的名字没有达成共识。我们都很高兴混蛋并不常见。
Theraot

1
@ NPSF3000有些人建议位置的四,五和六阶导数应为快,爆裂和爆裂声!:-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter

1
也许改变these vector are unit vectorsdirection vectors are unit vectors什么?因为到目前为止,读者可能these对前面两个示例mPosition 都感到困惑mDirection。(这就是我最初阅读它的方式。)
2015年

8

这是否意味着幅度仅仅是距原点(0,0,0)的距离?

可以通过这种方式看到它,但是仅以这种方式看到它可能会导致错误的理解。


首先,向量不是点,点也不是向量。

一个之间的差矢量和一个是一样的一个之间的持续时间一天中的时间。前者是一个时间间隔,后者是一个时间点。显然,6个小时与6时不同。您不会说“比赛持续1点钟”,也不会说“让我们在13小时见面”。比赛持续一个小时(一个间隔),您在13点钟遇到一个特定的时间点。

向量和点也是如此。向量是一个间隔-如果需要的话,是一个位移。它指向某个方向,是的,它有长度。

因此,点和向量是相关的,就像一天的持续时间和时间一样。比赛在13点开始,在15点结束。两者都是时间点。但是15点-13点= 2小时,持续时间。比赛持续两个小时,而不是两点钟。

同样适用于积分。点A和B之间的差表示为⃗v= B-A,其中⃗v表示矢量,而A和B表示点。

现在,有一种叫做位置向量的东西。你可以考虑一个向量的点到一定程度,当你说从源头上向量点到某些其他点。换句话说:如果您所有的朋友都知道您将每天的​​时间称为从午夜(0点)开始的持续时间,则可以说“我们在6小时见面”。他们会知道0点+ 6小时= 6点,因此知道何时与您会面。实际上,这就是海军时代所做的。“我们六点钟见面”是指六点钟。

因此,如果您将原点视为锚点,则向量<1,2,3>指向点(1,2,3),是的,此向量的长度是该点到原点的距离。

但是向量<1,2,3> 指向(1,1,1)到(2,3,4),在这种情况下,其长度表示两个点之间的距离。


因此,如您所见,向量具有长度,因为它不是点,而是一个间隔-位移。


相关阅读:Torsors
Buster

5

向量可以表示3d空间中两个点之间的线(方向和距离)或3d空间中的位置(长度是距原点的距离)。

如果您有A点和B点,则BA = AB =从A到B所必须行进的方向和距离。


谢谢,但是使用Vector3.Normalized是什么意思?文档说:Returns this vector with a magnitude of 1,那不破坏向量中保存的信息吗?实际上是MagnitudeNormalized是什么让我感到困惑。
Mohammed Noureldin

无论是空间中的点还是指示速度的箭头都在您的脑海中。相同的数据代表两者。
万能的'17

@MohammedNoureldin归一化向量是单位长度之一(为1)。是的,如果对向量进行归一化,则会丢失长度或大小信息。如果两者都需要(在许多情况下有用),则可以得到向量的长度,然后对其进行归一化。
伊恩·扬

1

从长远来看,Unity关于点与矢量的说法是没有意义的,因为几何API只是选择了不同的定义以使该工具更易于访问,因此它们与几何中这些概念的实现方式不符。如果可以的话,请看一看这些类的实现。因为它是任意的,所以了解其定义是理解概念是唯一的方法。完全披露,我没有Unity经验。

向量是向量空间中的一个点,因为几何中点的概念由基础集合的元素编码。向量空间具有可分辨的向量,称为原点或0。线性代数是尝试以代数方式编码带有原点的欧几里得几何图形的片段。

箭头及其长度

跨点空间的运动通常被解释为从源/前点到目标/后点的所有箭头

可以将两个自变量的函数应用于一个自变量,以产生一个自变量的函数-我们可以说x +,该函数将每个向量y转换为向量x + y。这是与添加x关联的翻译。关联的箭头从点y延伸到点x + y。请参阅:部分应用程序currying

那么为什么我们只使用一个箭头呢?从原点指向的特定载体的箭头,该XX + -原点是矢量相加的身份。因此,我们可以仅从值x +0 = x恢复转换x + 。

作为空间的图形表示,箭头表示与我们从确定其值的视觉或物理上推断翻译效果的能力有关。我们什么时候具备这种能力?

给向量空间一个范数使其成为范数向量空间,是要提供一个向量长度的概念,该向量的长度对从0开始的距离是有意义的。同样,这是一个满足三角形不等式的距离,即严格限制两个向量的长度与其总和之间的关系。从长度上,我们可以定义距离以使其成为度量空间,而测地线是一条本来就笔直的路径,因为路径应尽可能短。该欧几里得范诱导欧几里得距离和测地线是箭头的线段,但如果你画的箭头使用测地线不同的规范,您可以从测地线推断转换的几何效果,以了解几何形状。

点和向量的含义

在做游戏几何图形的某些情况下,点的空间不是矢量空间。尺寸的仿射空间Ñ 可以嵌入在尺寸的射影空间Ñ。仿射图缩小为可预测性。投射力还可以让您进行FOV,w / c我认为这不是仿射的。投射性具有以下优点:

通过将投影空间的点视为通过线性空间原点的线,可以从线性(n +1)空间(向量空间)构造场上的投影n空间。穿过原点的平面又会产生投影线。向量与固定矩阵的乘积是线性映射,这就是矩阵乘法的目的。线性图保留原点并且与入射角兼容。特别地,如果f线性自同构对应于可逆(n +1)x(n +1)矩阵),并且穿过原点的两条线L,M跨越平面A,则f L,f M是穿过f A的原点的线,因此f还将保留射影空间上的入射-可逆矩阵具有关联的射影率。矩阵乘法对线性图的组成进行编码,从而对投影性进行编码。

从线性空间中删除原点,给定线上通过原点的所有点都是彼此的标量倍数。利用这一事实,均质化为每个投影点选择一个线性点作为代表,并为每个投影变换选择一个可逆矩阵作为支持(如2D-> 2D仿射图,如3D-> 3D线性图视频),在这种情况下代表在矩阵矩阵和矩阵向量乘积下闭合的方式,并通过唯一的投影事物给出和给出。从线性平面构造投影平面的描述将某些东西联系在一起。

因此,在模型-视图-投影矩阵管道中,我们使用矢量表示投影空间的点,但是投影空间不是矢量空间,并且并非我们使用的矢量空间中的所有矢量都代表点的几何形状(请参见右侧的仿射平面图片)。如果需要翻译,我们使用翻译矩阵而不是向量和。有时,人们称投影或仿射点向量,尤其是在这种情况下使用设置时。


2
+1。但我的直觉是,大多数了解您使用的语言的人已经知道了原始问题的答案,因此,我建议针对休闲读者调整答案。
彼得(Peter

@Peter我发现很难解决所有问题。我想使它更易于访问,但是不精打细算就不知道该怎么做。但是,当我第一次使用OpenGL时,我想知道同构矩阵,透视图矩阵的含义,以及如何通过求和发现翻译矩阵作为翻译的替代方法,因此这可能不太深入。形式主义是语言,给出正确的措词,我认为将讨论如何讨论这些概念。但是,简而言之,它非常不透明,因此它更像是Wiki阅读列表。
Loki Clock

我添加了一些链接,特别是在较高维度上以线性地图的形式制作了仿射地图的视频。希望这会有所帮助。
Loki Clock

很好 应该得到更多的支持。
彼得(Peter

-1

向量的长度(或大小)为square root of (x*x+y*y+z*z)。向量始终被认为是从向量的原点<0,0,0> 该点所描述的光线<x,y,z>

可以在此处找到有关此文档的统一文档。


对不起,但这是完全错误的。如果我有两个点A和B,则v = BA是从A到B的向量。在这种情况下,v根本不经过原点。向量不是重点。它可以用来表示一个点(如位置矢量),但它不同的东西。请弄清楚代数基础知识。
Polygnome

我已经更新了答案,以消除混乱,但是我提供了Vector3在Unity中的用法的文档参考,我的答案与所有​​排名较高的答案(包括您自己的答案)一致。
斯蒂芬

如果仔细阅读unity文档,您会发现它从未提及原点,因为原点始终与向量的长度无关。(1,1,1)和(2,3,4)之间的向量为<1,2,3>,长度为sqrt(1 ^ 2 + 2 ^ 2 + 3 ^ 3)=〜3.9,其中是这两点之间的距离。它甚至从来没有接触到原点在所有。我很困惑,你怎么可能觉得我的回答与你同意,因为它没有,在所有
Polygnome
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.