向量有什么不同/复杂/有用?


21

如果这不是一个真正的问题,请原谅我,但我确实对此感到困惑。

我经常听到其他游戏开发人员谈论使用向量如何非常有用,但是每个人都被向量数学所吓倒,向量似乎令人生畏。我从来没有去了解他们。

所以,最后我在Wikipedia 上看了Vector,感到很惊讶。除非我弄错了,否则一个矢量(为简单起见,它是2D)只是x和y坐标。 如果我误解了,请纠正我。

所以这是我的问题:这是否意味着二维(或三维)坐标的任何表示都是矢量?如果是这样,则向量和坐标是同一件事。而且,使用坐标就几乎不可能创建游戏,那么向量对进行过大量游戏编程的人来说是令人困惑的还是陌生的?

我可以对此进行澄清。任何帮助表示赞赏。


5
向量非常简单,直到您开始以3D旋转...然后您需要四元数,而这些将使您大吃一惊。
阿利斯泰尔·布克斯顿

向量的概念确实令人困惑。我要求在数学,math.stackexchange.com/questions/429363math.stackexchange.com/questions/384927但还没有得到明确的答复。纯粹是无奈。也许您可以添加到它。
2013年

1
有了这些答案中的所有坏比喻,难怪人们会感到困惑。
Alistair Buxton

Answers:


29

不要让数学专业的人听到您称呼Vectors点或坐标!

2D向量具有x和y 分量,而不是坐标。向量不定义位置,而是定义方向和大小。

我无法告诉您为什么人们会对他们感到恐惧,这可能与人们对数学普遍感到恐惧的原因相同,因为每个人都说很难对它们有所了解!

向量和坐标不是一回事。它们看起来确实相似,但是使用方式却大不相同。

坐标定义了世界上的位置。向量定义方向和大小。他们两个经常一起使用。举个例子:

角色具有位置和速度。位置是坐标,速度是矢量。将速度加到该位置将使字符沿矢量的方向移动一定距离,该距离由矢量的大小定义(请注意,矢量的大小是速度,因此这为我们提供了方向和速度)。

或在此示例中:

在此处输入图片说明

这两个角色有位置,激光射击是矢量。两个位置之间的向量为(3,1)。这意味着它沿X轴行进+3,沿Y轴行进+1。可以使用Sqrt((X X)+(Y Y))找到幅度的地方。

可以在Wolfire博客上找到向量数学的完整概述。


7
当有人称向量为点或坐标时,不仅数学家会感到沮丧。美国物理学家也会把你弄乱。
TASagent

2
+1但是,如果我要采摘,速度是一个向量,速度是该向量的大小。
Ergwun

2
@Val:我不会说这是胡扯。它解决了这个问题的误解,即向量只是x和y坐标。通过提及“向量空间的元素”使答案更正式或更准确,对任何人都没有好处,只能帮助解释为什么人们发现向量代数令人生畏。
马克·托马斯

3
向量只是一个位置,它们告诉您将向量应用于(0,0)时的位置。向量可以修改位置,但自身不包含位置信息。我明白你在说什么。我认为我们正在讨论的差异对这个问题并不重要。这是在游戏开发中使用向量的方式。感谢您的输入。
MichaelHouse

4
@Val:任何好的线性代数讲义都将与Byte56一致:向量与空间中的位置不同。将“北3英里,东1英里”添加到“南1英里”是有意义的;但是将“白宫的位置”添加到“五角大楼的位置”是没有意义的。将参考点固定为(0,0)后,就可以使用向量确定点,反之亦然,因此在某些表示形式中,它们看起来很相似;但他们不同。摘要:比较仿射空间向量空间
PLL

9

我认为,当您开始处理更复杂的操作(如归一化,点和叉积)并使用带有矩阵的多个坐标系在它们之间进行转换时,可能会出现威吓因素。即使您有很强的几何学和代数背景,这些一开始不一定很容易理解。

同样,至少在美国,经历过典型的中学数学序列的人们习惯于从线,坡度,角度等方面考虑几何形状。他们必须在某种程度上不了解这些东西,并学会用向量和矩阵来考虑。并不是线性代数的概念如此延伸,而是与人们可能在学校学习过的经典几何中使用的概念有所不同。


顺便说一句,向量和点之间的区别在于您可以对它们执行的操作。尽管两者(在特定的坐标系中)由一系列零件表示,因此看起来“相同”,但允许的操作也不相同。例如,您可以添加两个向量,或将向量乘以标量。您不能使用点数来做到这一点-至少,这样做没有任何意义。但是您可以减去两个点,结果是一个点到另一个点的向量。您还可以将点添加到向量中以获取新点。

点和向量在变换方面的行为也有所不同。即,点需要翻译,而向量则不需要。考虑一个物体以位置(点)和速度(矢量)运动的例子。如果将对象平移到其他位置,则会更改其位置,但不会更改其速度。

实际上,进一步推论,不仅有矢量,还有矢量。还有诸如covectorbivector之类的其他实体,就在坐标系统中具有一系列组件而言,它们也可能看起来像是矢量,但在可用操作以及它们对变换的反应方式方面的行为却有所不同。这些都属于数学领域的Grassmann代数。除此之外,还可以考虑张量代数。这是高级的东西。


1
我大部分的困惑是为什么人们认为向量是如此复杂,所以这有所帮助。也许我觉得它们很简单,因为在上高中几何之前,我实际上是在编程中使用几何。
starscape 2013年

1
当您具有位置(点),速度(矢量)和加速度(矢量)时,在两个答案中使用的位置与速度的示例分解了。如果更改速度,则加速度不会改变,但它们都是矢量。向量和点之间的区别虽然正确,但却会分散注意力-实际上,所有游戏都将位置存储为向量,这些向量相对于原点是隐式的(如果使用场景图,则可能是间接的)。
Alistair Buxton

1
@AlistairBuxton我不明白你的意思-如果平移坐标系,则物体的速度和加速度都不会改变,但是如果旋转坐标,则速度和加速度都会旋转。因此,我看不到任何“崩溃”的地方。
内森·里德

2
@AlistairBuxton没有“存储位置作为向量”这样的东西。游戏将位置向量存储为特定坐标系中的标量分量列表。那不会使他们成为同一个人。打个比方:整数和浮点数都存储为二进制位列表,但含义不同,操作也不同。
内森·里德

1
@Val你完全是基地。向量不是[p位置,v-速度]。它内部既没有点又没有速度。只是[x速度,y速度,z速度](对于速度矢量)。关键是,这是与[x位置,y位置,z位置]不同的事物。
内森·里德

7

向量确实还不错。人们只有一点点数学不熟悉。

首先,向量不代表空间中的位置。这在概念上非常重要。向量代表方向(例如“北”)和大小。在具有正常Math XY坐标的地图上,“北”将是矢量(0,1)(在Y轴上)。请勿将其与位置(0,1)混淆,位置是放置原点的任何位置的上方一个单位。 向量是方向和大小

位移(向量)是一个向量(例如向上移动两个单位,向右移动一个单位),而位置不是。

向量本身并不是人们遇到的问题。通常是向量的矩阵和运算。

例如,如果将向量乘以称为“旋转矩阵”的特殊矩阵,则向量将旋转矩阵指定的量。此外,有些人对矩阵乘法有疑问。如果您不熟悉它,请查找它。

此外,您可以将这些矩阵(或运算)“堆叠”在一起。就像绕X轴旋转90度,然后绕Y轴旋转90度。如果我们称第一个矩阵为M,第二个矩阵为N,则运算将为v * M * N。但是,矩阵乘法不是可交换的,因此与v * N * M不同。

在图形编程中,您经常对向量和其他矩阵执行复杂得多的操作。FoV的转换以及将您的坐标放置在屏幕空间等中。这的确不错,但是对于新手来说可能会令人生畏。

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.