我正在尝试实现并了解如何在GLSL中执行简单的翻译。为此,我在Octave中进行了一个简单测试,以确保我了解转换本身。
我有以下向量表示嵌入到4维向量中的2D坐标:
candle = [1586266800, 11812, 0, 0]
这意味着该点具有位置x=1586266800 and y=11812
。
我正在尝试使用以下值来应用翻译:
priceBottom = 11800
timestampOrigin = 1586266800
这意味着坐标的新原点将是x=1586266800
和y=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
显然不起作用。
您的翻译是错误的。从数学的角度来看,您要进行的转换是:
即您需要使用另一个值为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 )