12

在 3D 游戏数学的上下文中,3D 向量是否与 3D 点元组 (x,y,z) 不同?

如果它们不同,那么如何计算给定 3d 点的向​​量?

4

7 回答 7

14

不同之处在于向量是一个代数对象,它可能会或可能不会作为某个空间中的一组坐标给出。(感谢 bungalobill 纠正我的马虎)。

点只是由坐标给出的点。一般来说,可以将两者混为一谈。如果给您一组坐标,并告诉您它们构成了一个没有进一步信息(基础选择等)的“点”,那么您可以将那组数字交还并合法地声称已经产生了一个向量。

两者之间最大的区别在于,对一个人做的事情,你可以对另一个人做的事情是没有意义的。例如,

  1. 您可以添加向量:<1 2 3> + <3 2 1> = <4 4 4>
  2. 您可以将向量乘以(或缩放)一个数字(通常称为标量)2 * <1 1 1> = <2 2 2>

  3. 你可以问两点相距多远:d((1, 2, 3), (3, 2, 1) = sqrt((1 - 3) 2 + (2 - 2) 2 + (3 - 1) 2 ) = sqrt(8) ~= 2.82

考虑向量和点之间关联的一种很好的直观方法是,向量告诉您如何从原点(我们为其分配坐标 (0, 0, 0) 的空间中的一个点)到其关联的观点。

如果您平移坐标系,那么您将获得同一点的新矢量。尽管构成该点的坐标将进行相同的平移,因此在两者之间进行合并是很容易的。

同样,如果旋转坐标系或应用一些其他变换(例如剪切),那么与该点相关的坐标和矢量也会发生变化。

向量也可能完全是其他东西,例如区间 [0, 1] 上的有界函数是向量,因为您可以将它乘以实数并将其添加到区间上的另一个函数中,它将满足某些要求(即向量空间的公理)。在这种情况下,可以考虑在 [0, 1] 中为每个实数 x 设置一个坐标,其中该坐标的值就是 f(x)。这就是无限维向量空间的最简单示例。

有各种各样的向量空间,向量是“点和方向”(或任何它应该是)的概念实际上是非常空洞的。

于 2010-10-12T10:52:54.847 回答
2

向量表示从一种状态到另一种状态的变化。要创建一个,您需要两个状态(在本例中为点),然后从最终状态中减去初始状态以获得合成向量。

于 2010-10-12T10:53:47.603 回答
1

在 3D 游戏数学的上下文中,3D 向量是否与 3D 点元组 (x,y,z) 不同?

传统的矢量意味着方向和速度。一个点可以被认为是一个时间步长的世界起点的向量。(即使它在数学上可能不被认为是纯粹的)

如果它们不同,那么如何计算给定 3d 点的向​​量?

target-tower 是常用的助记符。

小心你的使用。结果向量实际上是正常的*速度。如果您想将其更改为对游戏应用程序有用的东西:您需要先对向量进行归一化。

示例:Joe 在 (10,0,0),他想去 (10,10,0)
目标塔:(10,10,0)-(10,0,0)=(0,10, 0)
归一化结果向量:(0,1,0)
应用“物理”:(0,1,0)* speed*elapsed_time < speed = 3 我们会说计算机在两次之间冻结了整整 2 秒最后一步和这一步是为了便于计算 > =(0,6,0)
将结果向量添加到空间中的乔斯当前点以获得他在空间中的下一个点:... =(10,6,0)

法线 = 向量/(sqrt(x*x+y*y+z*z))

...我想我在这里拥有一切

于 2010-10-12T12:00:09.587 回答
1

向量是比 3D 空间中的点更普遍的概念。

向量可以有 2、3 或 n 维。除了位置之外,它们还代表物理世界中的许多量(例如,速度、力、加速度)。

数学家会说向量是根据以下规则变换的一阶张量:

u(i) = A(i, j)v(j)

你需要点和向量,因为它们不同的。3D 空间中表示位置的点是一个向量,但每个向量都不是 3D 空间中的一个点。

然后是作为容器的向量的计算机科学概念——它是一组值或引用的抽象。这与数学家的向量概念是不同的概念,因为每个向量容器都不需要遵守一阶张量变换定律(例如,OrderItems 的向量)。那是另一个单独的想法。

在谈论向量和点时,记住所有这些是很重要的。

于 2010-10-12T12:17:04.923 回答
-1

向量是状态的变化。一个点是静态点。两个向量可以平行或垂直。您可以有两个向量的乘积,即第三个向量。您可以将向量乘以常数。您可以添加两个向量。
所有这些操作都是不允许的。因此,如果您将两者都视为 C++ 类,那么在编程方面,vector 类中会有很多这样的方法,但可能只有 Get 和 Set 用于点。

于 2010-10-12T11:04:50.603 回答
-1

在博弈数学的背景下,没有区别。

点是仿射空间的元素。†</sup> 向量是向量(又名线性)空间的元素。当您在仿射空间中选择原点时,它会自动在该仿射空间上诱导出线性结构。反之亦然:如果你有一个向量空间,它已经满足仿射空间的所有公理。

事实是,在计算方面,用数字表示仿射空间的唯一方法是使用数字元组,它们形成向量空间。

游戏中的每个对象总是有一个起源,知道它在哪里是至关重要的。该原点是相对于世界原点设置的,世界原点是相对于相机/视口的原点设置的。对象的顶点表示为向量——与对象原点的偏移量。您使用矩阵乘法来转换对象——这也是一个纯粹的向量空间操作(如果不先指定原点,就不能将仿射点乘以矩阵)。等等,等等……正如我们所看到的,所有那些我们可能认为是“点”的三元组数字实际上都是局部坐标系中的向量。

那么在代数研究之外,有什么理由区分这两者呢?这是一种不必要的抽象,不必要的抽象是有害的(KISS)。所以我的回答是否定的,只使用一个向量类型。

†</sup> 或游戏开发环境之外的任何拓扑空间。

于 2010-10-12T10:56:39.710 回答
-2

向量是一条线,它是一系列点,但它可以由两个点表示,起点和终点。

如果您将原点作为起点,那么您可以仅给出终点来描述您的向量。

于 2010-10-12T10:53:23.643 回答