【问题标题】:What is a 3D Vector and how does it differ from a 3D point?什么是 3D 矢量,它与 3D 点有何不同?
【发布时间】:2011-04-24 06:02:31
【问题描述】:

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

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

【问题讨论】:

标签: math 3d vector vertices


【解决方案1】:

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

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

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

  1. 您可以添加向量: + =
  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)。这就是无限维向量空间的最简单示例。

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

【讨论】:

  • “可能由一组坐标组成,也可能不由一组坐标组成”,来自 Zorn 的引理,因此基总是存在的,因此任何向量都可以表示为一组坐标。对于独立于 AC 的有限维空间也是如此。
  • @ybungalobill。正确的。我有点草率,因为我的意思是“可能会或可能不会被给定作为一组坐标”。我会更新的。
  • 总的来说,我发现很多关于 3d 需要了解的一切都由 Apodaca 在Lore for TDs 中解释过
【解决方案2】:

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

【讨论】:

  • -1:设 V 为任意向量空间。它至少有一个元素,即中性加法元素,我们称它为0。怎样才能说“你需要两种状态才能产生0”?
  • @gspr:最终状态与初始状态相同。
  • 当然,您可以将向量解释为状态的转换,但是说“您需要两个状态来创建向量”至少是令人困惑的。我刚刚为你创建了一个向量,甚至没有使用状态这个词。您能够将我的向量解释为状态的变化并不需要这样的解释(或者在线性代数中很常见,我想这在这里更重要)。
  • 现在重新阅读我的评论,我觉得我有点咄咄逼人了。这不是本意,所以我希望你不要这样阅读:-)
  • 明确一点,这意味着没有点就没有向量,对,但是点的存在并不一定意味着向量?一个向量需要两个点,一个通常是原点,这是一种很好的思考方式吗?
【解决方案3】:

向量是比 3D 空间中的点更通用的概念。

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

数学家会说向量是一阶张量,根据这个规则进行变换:

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

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

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

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

【讨论】:

  • 真的,真的必须说,以免混淆原始海报:如果有问题的空间是标准结构的R^3,那么 point矢量 只是同一事物的好名字!
  • 我认为数学家会说:“向量空间是一个满足标量乘法的阿贝尔群(等等,等等)”。维基百科的定义在en.wikipedia.org/wiki/Vector_space#Definition 有完整的故事(包括上面的“等等”) - 无需胡乱处理来自物理世界的张量或概念。当然,后者非常适合直觉 :-)
  • @duffymo:不,你只是在重新包装它。当然,说“一阶张量”(有点)避免代数,直到我问“什么是张量?”。那么无论如何你都必须启动代数机器。因此,为了传达基础知识,通用定义(例如由 Wikipedia 提供)更为合理。
  • @gspr 我想两者兼而有之,尽管我认为阿贝尔群的概念已经足够初级,应该在高中时教授:虽然不是,大多数人都不知道它是什么是。它(在理解其对向量空间的重要性所必需的水平上)比张量简单几个数量级。另外,请不要认为我对花哨有任何反对;)
  • @gspr。我认为将张量的概念引入其中(仅限于 R^n)不会造成任何伤害。我认为这种解释没有任何好处。我也不同意点和向量在 any 上下文中是相同的。向量是代数概念,点是拓扑概念。可以说,在 R^3 中将两者混为一谈 并无害处,但我不喜欢告诉任何人它们是相同的。如果他们不得不伤脑筋才能理解其中的区别,那么这对他们来说可能还是有好处的。
【解决方案4】:

在 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 =(0,6,0)
将结果向量添加到 Joes 空间中的当前点以获得他在空间中的下一个点:... =(10,6,0)

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

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

    • -1:请参阅我对 Ignacio Vazquez-Abrams 关于向量是“状态变化”的回答的评论。
    【解决方案6】:

    在游戏数学方面没有区别。

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

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

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

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

    或游戏开发环境之外的任何拓扑空间。

    【讨论】:

    • 点不是向量。将向量乘以常数会得到具有不同大小的向量。一个点乘以一个常数是没有意义的。
    • @gspr,当然一般的拓扑空间可能不是向量空间。但问题是关于 3d 游戏数学。
    • @Ignacio:它具有完全精确且定义明确的含义。维基百科给出了很好的介绍:en.wikipedia.org/wiki/Vector_space#Definition
    • @Ignacio:给我一个依据,我会回答你的问题。
    • @Ignacio:就目前而言, (5,2, -3.4, 8, -2) 在“向量空间”中是没有意义的,因为我不知道是哪个,我也不知道知道你正在使用的基础。当然,在这种情况下,自然解释是 R^5 中的线性组合 5e_1 + 2e_2 - 3.4e_3 + 8e_4 - 2e_5 与标准基 e_1,...,e_5。它是向量空间中的一个点(在本例中为 R^5),对于这种动物来说,方便的术语是 vector
    【解决方案7】:

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

    如果你以原点为起点,那么你可以描述你的向量只给出终点。

    【讨论】:

    • -1:您正在描述欧几里得空间中直线的概念。它与向量相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多