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

Graphics 如何将平移应用于坐标向量?,graphics,octave,Graphics,Octave,我试图实现并理解如何在GLSL中执行简单的翻译。 为了做到这一点,我正在做一个简单的八度测试,以确保我理解转换本身 以下向量表示嵌入到4维向量中的二维坐标: candle = [1586266800, 11812, 0, 0] 这意味着该点具有位置x=1586266800和y=11812 我正在尝试使用以下值应用转换: priceBottom = 11800 timestampOrigin = 1586266800 这意味着新的坐标原点将是x=1586266800和y=11800 我构建了以

我试图实现并理解如何在GLSL中执行简单的翻译。 为了做到这一点,我正在做一个简单的八度测试,以确保我理解转换本身

以下向量表示嵌入到4维向量中的二维坐标:

candle = [1586266800, 11812, 0, 0]
这意味着该点具有位置
x=1586266800和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

这显然不起作用。

你的翻译错了。从数学角度来看,您所追求的转换是:

i、 e.您需要使用另一个值为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 )

我认为OP有一个3D向量已经被放大了,虽然那个地方有一个0而不是1。谢谢,@cris luengo说3D向量已经被放大了,有一个0而不是1。将答案和注释混合在一起可以澄清操作。@cris luengo提出了一个与实际GLSL问题相关的后续问题: