在 Matrix3D 中使用偏移量进行平移
Use of offsets for translation in Matrix3D
我有一个应用程序,我想在其中缩放、旋转和平移一些 3D 点。
我习惯于看到 3x3 旋转矩阵,并将转换存储在单独的值数组中。但是 .Net Matrix3D 结构 (https://msdn.microsoft.com/en-us/library/System.Windows.Media.Media3D.Matrix3D%28v=vs.110%29.aspx) 是 4x4 并且有一排 "offsets" - OffsetX、OffsetY、OffsetZ,它们显然用于平移。但是,它们究竟是如何应用的呢?
假设我有一个带有 X、Y、Z 值的 Vector3D,比如 72、24、4。假设我的 Matrix3D 有
.707 0 -.707 0
0 1 0 0
.707 0 .707 0
100 100 0 1
即,OffsetX 和 OffsetY 值为 100。
Matrix3D 是否有任何方法或运算符可以将其应用为我的观点的翻译? Transform() 好像没有。如果我的代码有 . . .
Vector3D v = new Vector3D(72, 24, 0);
Vector3D vectorResult = new Vector3D();
vectorResult = MyMatrix.Transform(v);
vectorResult 有 8.484、24、-8.484,如果偏移量为 0,它具有相同的值。
显然我可以为每个轴单独手动应用平移,但我认为因为它是结构的一部分,所以可能有一些方法或运算符,您可以在其中给它一个点,它会应用整个矩阵,包括平移。在那儿?
4x4 矩阵表示使用齐次坐标的 3D space 变换。在此表示中,将 w
分量添加到向量中。该组件因矢量应表示的内容而异。用矩阵转换向量是简单的乘法:
transformed = vector * matrix
(两个向量都是行向量)。
w
组件仅被矩阵的最后一行考虑 - 存储翻译的部分。所以如果你想变换点,这个分量需要是 1。如果你想变换方向,这个分量需要是 0(因为如果你平移它们,方向向量不会改变)。
这种差异在 WPF 中用两种不同的结构来表示。 Vector3D
表示方向(w
分量 0),Point3D
表示点(w
分量 1)。因此,如果您将 v
设置为 Point3D
,一切都会如您所愿。
我有一个应用程序,我想在其中缩放、旋转和平移一些 3D 点。
我习惯于看到 3x3 旋转矩阵,并将转换存储在单独的值数组中。但是 .Net Matrix3D 结构 (https://msdn.microsoft.com/en-us/library/System.Windows.Media.Media3D.Matrix3D%28v=vs.110%29.aspx) 是 4x4 并且有一排 "offsets" - OffsetX、OffsetY、OffsetZ,它们显然用于平移。但是,它们究竟是如何应用的呢?
假设我有一个带有 X、Y、Z 值的 Vector3D,比如 72、24、4。假设我的 Matrix3D 有
.707 0 -.707 0
0 1 0 0
.707 0 .707 0
100 100 0 1
即,OffsetX 和 OffsetY 值为 100。
Matrix3D 是否有任何方法或运算符可以将其应用为我的观点的翻译? Transform() 好像没有。如果我的代码有 . . .
Vector3D v = new Vector3D(72, 24, 0);
Vector3D vectorResult = new Vector3D();
vectorResult = MyMatrix.Transform(v);
vectorResult 有 8.484、24、-8.484,如果偏移量为 0,它具有相同的值。
显然我可以为每个轴单独手动应用平移,但我认为因为它是结构的一部分,所以可能有一些方法或运算符,您可以在其中给它一个点,它会应用整个矩阵,包括平移。在那儿?
4x4 矩阵表示使用齐次坐标的 3D space 变换。在此表示中,将 w
分量添加到向量中。该组件因矢量应表示的内容而异。用矩阵转换向量是简单的乘法:
transformed = vector * matrix
(两个向量都是行向量)。
w
组件仅被矩阵的最后一行考虑 - 存储翻译的部分。所以如果你想变换点,这个分量需要是 1。如果你想变换方向,这个分量需要是 0(因为如果你平移它们,方向向量不会改变)。
这种差异在 WPF 中用两种不同的结构来表示。 Vector3D
表示方向(w
分量 0),Point3D
表示点(w
分量 1)。因此,如果您将 v
设置为 Point3D
,一切都会如您所愿。