我试图理解向量算术(特别是在Unity引擎中的使用)。我无法弄清楚向量仅代表一个点(位置和方向)如何具有长度(幅度)?
这是否意味着幅度只是其距原点(0,0,0)的距离?还是我错过了什么?
Normalized
上下文中的表示一个新矢量,该矢量保留1的,Direction
但具有Magnitude
1。即, Normalized
通过缩放原始矢量来创建该矢量。
我试图理解向量算术(特别是在Unity引擎中的使用)。我无法弄清楚向量仅代表一个点(位置和方向)如何具有长度(幅度)?
这是否意味着幅度只是其距原点(0,0,0)的距离?还是我错过了什么?
Normalized
上下文中的表示一个新矢量,该矢量保留1的,Direction
但具有Magnitude
1。即, Normalized
通过缩放原始矢量来创建该矢量。
Answers:
这是否意味着幅度仅仅是距原点(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
类同时用于矢量和点的事实是合理的,但可能会造成混淆。其他库专门区分Point3D
和Vector3D
,有时有类似的基础Tuple3D
。
A vector is, in fact, not a single arrow
,您是对的,将Vector3表示为单个箭头正好使我感到困惑。+1提及这个关键句子。
vector
数组或倍数变得更加复杂!在C ++中,您可以std::vector<Vector3>
举个例子。一vector
的Vector
秒。
这是否意味着幅度仅仅是距原点(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),也可以是其他位置。
myVec3.normalized
返回一个新 Vector3,它的方向相同,但幅值为1。myVec3
不变
these vector are unit vectors
到direction vectors are unit vectors
什么?因为到目前为止,读者可能these
对前面两个示例mPosition
和 都感到困惑mDirection
。(这就是我最初阅读它的方式。)
这是否意味着幅度仅仅是距原点(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),在这种情况下,其长度表示这两个点之间的距离。
因此,如您所见,向量具有长度,因为它不是点,而是一个间隔-位移。
向量可以表示3d空间中两个点之间的线(方向和距离)或3d空间中的位置(长度是距原点的距离)。
如果您有A点和B点,则BA = AB =从A到B所必须行进的方向和距离。
Returns this vector with a magnitude of 1
,那不破坏向量中保存的信息吗?实际上是Magnitude
和Normalized
是什么让我感到困惑。
从长远来看,Unity关于点与矢量的说法是没有意义的,因为几何API只是选择了不同的定义以使该工具更易于访问,因此它们与几何中这些概念的实现方式不符。如果可以的话,请看一看这些类的实现。因为它是任意的,所以了解其定义是理解概念是唯一的方法。完全披露,我没有Unity经验。
向量是向量空间中的一个点,因为几何中点的概念由基础集合的元素编码。向量空间具有可分辨的向量,称为原点或0。线性代数是尝试以代数方式编码带有原点的欧几里得几何图形的片段。
跨点空间的运动通常被解释为从源/前点到目标/后点的所有箭头。
可以将两个自变量的函数应用于一个自变量,以产生一个自变量的函数-我们可以说x +,该函数将每个向量y转换为向量x + y。这是与添加x关联的翻译。关联的箭头从点y延伸到点x + y。请参阅:部分应用程序,currying。
那么为什么我们只使用一个箭头呢?从原点指向的特定载体的箭头,该X在X + -原点是矢量相加的身份。因此,我们可以仅从值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线性图视频),在这种情况下代表在矩阵矩阵和矩阵向量乘积下闭合的方式,并通过唯一的投影事物给出和给出。从线性平面构造投影平面的描述将某些东西联系在一起。
因此,在模型-视图-投影矩阵管道中,我们使用矢量表示投影空间的点,但是投影空间不是矢量空间,并且并非我们使用的矢量空间中的所有矢量都代表点的几何形状(请参见右侧的仿射平面图片)。如果需要翻译,我们使用翻译矩阵而不是向量和。有时,人们称投影或仿射点向量,尤其是在这种情况下使用设置时。
向量的长度(或大小)为square root of (x*x+y*y+z*z)
。向量始终被认为是从向量的原点<0,0,0>
到该点所描述的光线<x,y,z>
可以在此处找到有关此文档的统一文档。