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