如何将平移应用于坐标矢量?

问题描述 投票:2回答:1

我正在尝试实现并了解如何在GLSL中执行简单的翻译。为此,我在Octave中进行了一个简单测试,以确保我了解转换本身。

我有以下向量表示嵌入到4维向量中的2D坐标:

candle = [1586266800, 11812, 0, 0]

这意味着该点具有位置x=1586266800 and y=11812

我正在尝试使用以下值来应用翻译:

priceBottom = 11800
timestampOrigin = 1586266800

这意味着坐标的新原点将是x=1586266800y=11800

我建立了以下翻译矩阵:

[ 1 0 0 tx ]
[ 0 1 0 ty ]
[ 0 0 1 tz ]
[ 0 0 0 1  ]

translation1 = [1, 0, 0, -timestampOrigin; 0, 1, 0, -priceBottom; 0, 0, 1, 0; 0, 0, 0, 1]

此矩阵正确吗?如何将其应用于向量?

我尝试过:

>> candle * translation1
ans =
1.5863e+009  1.1812e+004  0.0000e+000  -2.5162e+018

显然不起作用。

graphics octave
1个回答
0
投票

您的翻译是错误的。从数学的角度来看,您要进行的转换是:

即您需要使用另一个值为1的维度来“扩展”向量,以便可以在矩阵乘法期间将其用于向每一行添加“平移”信息。

所以,如果我正确理解了您的示例,则>]

Initial_position   = [1586266800; 11812; 0; 0]   # note: vertical vector
Augmented_vector   = [Initial_position; 1]
Translation_vector = [0         ; -12  ; 0; 0]   # note: vertical vector

Transformation = eye(5);
Transformation( 1:4, 5 ) = Translation_vector

Translated_vector = Transformation * Augmented_vector;
Translated_vector = Translated_vector( 1:4, 1 )
© www.soinside.com 2019 - 2024. All rights reserved.