Vector 为什么二维点用{x,y,1}矩阵表示,二维向量用{x,y,0}矩阵表示?

Vector 为什么二维点用{x,y,1}矩阵表示,二维向量用{x,y,0}矩阵表示?,vector,matrix,3d,point,Vector,Matrix,3d,Point,我很难从概念上理解这一点。点和向量之间的区别是什么?点和向量需要第三位的1和第三位的0?形式(x,y,1)是点的表示形式。这允许仅通过与变换矩阵相乘来旋转和平移点。对于3D,这对于计算机图形学非常重要。 将向量表示为(x,y,0)的一个原因是,添加到点的向量必须给出一个点,或者等价地,两点之间的差就是一个向量。你可以通过谷歌搜索“齐次坐标”来找到很多资源,例如,形式(x,y,1)是中的一个点的表示。这允许仅通过与变换矩阵相乘来旋转和平移点。对于3D,这对于计算机图形学非常重要。 将向量表示为(x

我很难从概念上理解这一点。点和向量之间的区别是什么?点和向量需要第三位的1和第三位的0?

形式(x,y,1)是点的表示形式。这允许仅通过与变换矩阵相乘来旋转和平移点。对于3D,这对于计算机图形学非常重要。 将向量表示为(x,y,0)的一个原因是,添加到点的向量必须给出一个点,或者等价地,两点之间的差就是一个向量。你可以通过谷歌搜索“齐次坐标”来找到很多资源,例如,

形式(x,y,1)是中的一个点的表示。这允许仅通过与变换矩阵相乘来旋转和平移点。对于3D,这对于计算机图形学非常重要。
将向量表示为(x,y,0)的一个原因是,添加到点的向量必须给出一个点,或者等价地,两点之间的差就是一个向量。你可以通过谷歌搜索“齐次坐标”来找到很多资源,例如,

对于齐次坐标,大小无关紧要。以下值表示同一点

{ x, y, 1 }
{ 2x, 2y, 2 }
要从
{a,b,c}
获取坐标,您需要

(x,y)=(a/c,b/c)

现在,为了表示一个方向,可以使用退化点(c=0),这样它就没有
x,y
坐标

要从
{a,b,0}
中获取方向向量,请使用

(ux,uy)=(a/√(a^2+b^2),b/√(a^2+b^2))

所以按照惯例,当齐次标量
c
为非零时,值表示坐标,当
c
为零时,值表示方向

此约定有助于沿直线定义点,给定直线原点
r={rx,ry,1}
和沿距离
t
的单位方向
u={ux,uy,0}
,点为

q = r + u*t = (rx,ry,1) + (ux,uy,0)*t = (rx+ux*t, ry+uy*t, 1)
它有坐标
(qx,qy)=(rx+ux*t,ry+uy*t)
。现在,如果向量在第三个坐标中有一个值,那么点
q
将无法正确计算


注意:这适用于2D和3D(有4个值)。

对于齐次坐标,大小无关紧要。以下值表示同一点

{ x, y, 1 }
{ 2x, 2y, 2 }
要从
{a,b,c}
获取坐标,您需要

(x,y)=(a/c,b/c)

现在,为了表示一个方向,可以使用退化点(c=0),这样它就没有
x,y
坐标

要从
{a,b,0}
中获取方向向量,请使用

(ux,uy)=(a/√(a^2+b^2),b/√(a^2+b^2))

所以按照惯例,当齐次标量
c
为非零时,值表示坐标,当
c
为零时,值表示方向

此约定有助于沿直线定义点,给定直线原点
r={rx,ry,1}
和沿距离
t
的单位方向
u={ux,uy,0}
,点为

q = r + u*t = (rx,ry,1) + (ux,uy,0)*t = (rx+ux*t, ry+uy*t, 1)
它有坐标
(qx,qy)=(rx+ux*t,ry+uy*t)
。现在,如果向量在第三个坐标中有一个值,那么点
q
将无法正确计算


注意:这既适用于2D,也适用于3D(有4个值)。

此问题似乎与主题无关,因为它与数学有关。此问题似乎与主题无关,因为它与数学有关。