Math 什么是三维矢量,它与三维点有何不同?

Math 什么是三维矢量,它与三维点有何不同?,math,3d,vector,vertices,Math,3d,Vector,Vertices,在3D游戏数学的上下文中,3D向量是否与3D点元组(x、y、z)不同 如果它们不同,那么如何计算给定3d点的向量呢?不同之处在于向量是一个代数对象,可以作为或不作为某个空间中的坐标集给出。(感谢平房比尔纠正了我的马虎) 一个点就是由坐标给出的一个点。一般来说,人们可以将两者混为一谈。如果给你一组坐标,并告诉你它们构成了一个“点”,而没有进一步的信息(基础的选择等),那么你可以把这组数字交回去,并合法地声称已经生成了一个向量 两者最大的区别在于,对一方做你能对另一方做的事情是没有意义的。比如说,

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


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

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

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

两者最大的区别在于,对一方做你能对另一方做的事情是没有意义的。比如说,

  • 您可以添加向量:+=
  • 可以用数字(通常称为标量)乘以(或缩放)向量 2*=

  • 你可以问两点之间的距离: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)。这是无限维向量空间的最简单示例


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

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


    如果以原点为起点,则可以描述仅给出终点的向量。

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

    在游戏数学的上下文中,没有区别

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

    事实上,当涉及到计算时,用数值表示仿射空间的唯一方法是使用数字元组,这也形成了向量空间

    游戏中的每个对象都有一个原点,知道它在哪里是至关重要的。该原点是相对于世界原点设置的,而世界原点是相对于摄影机/视口的原点设置的。对象的顶点表示为向量——从对象原点的偏移量。使用矩阵乘法变换对象--这也是一个纯粹的向量空间运算(你不能在不指定原点的情况下将一个仿射点乘以一个矩阵)。等等,等等。因为我们看到所有我们可能认为是“点”的三元组数字实际上是局部坐标系中的向量

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


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

    向量是状态的变化。一个点是静态点。两个向量可以平行或垂直。你可以有两个向量的乘积,这是第三个向量。你可以将一个向量乘以一个常数。你可以添加两个向量。
    所有这些操作都不允许在点上。所以程序化的,如果你认为两者都是C++类,那么向量类中会有很多这样的方法,但可能只得到和设置了点。 在3D游戏数学的上下文中,3D向量是否与3D点元组(x、y、z)不同

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

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

    目标塔是常用的助记符

    使用时要小心。生成的向量实际上是normal*velocity。如果您想将其更改为在游戏应用程序中有用的东西:您需要首先对向量进行规范化

    示例:乔在(10,0,0),他想去(10,10,0)
    目标塔:(10,10,0)-(10,0,0)=(0,10,0)
    对结果向量进行规格化:(0,1,0)
    应用“物理学”:(0,1,0)*速度*经过的时间<速度=3,我们可以说,为了便于计算,计算机在最后一步和这一步之间冻结了整整2秒> =(0,6,0)
    将生成的向量添加到Joes空间中的当前点,以获得他的下一个空间点:…=(10,6,0)

    法线=向量/(sqr)
    u(i) = A(i, j)v(j)