2D坐标系平移原理(几何)

案例

已知 红色点在蓝色坐标系的位置为(3, 2)

蓝色坐标系的原点在黑色坐标系中的位置为(2,2)

求解: 红色点在黑色坐标系中的位置点?

分析计算

初步认知

如果从坐标图上我们可以很快的计算出结果为 (5, 4)

那么这个值是如何来的呢:

3 + 2 = 5
2 + 2 = 4

Tip

第一行的 3 + 2中的 3 指的是 红色点蓝色坐标系x坐标 位置。

第一行的 3 + 2中的 2 指的是 蓝色坐标系 相对于 黑色坐标系 在中 x轴 方向 平移距离

第一行的5 是计算出来的 红色点黑色坐标系x坐标 位置。

第二行的2 + 2中的前一个2指的是 红色点蓝色坐标系y坐标 位置。

第二行的2 + 2中的后一个2指的是 蓝色坐标系 相对于 黑色坐标系 在中 y轴 方向 平移距离

第二行的4 是计算出来的 红色点黑色坐标系y坐标 位置。

坐标平移抽象化

我们可以这样理解 (2,2) 这个个坐标:

  • 蓝色坐标系相较于黑色坐标系,在x方向上平移了 2 个单位的距离。
  • 蓝色坐标系相较于黑色坐标系,在y方向上平移了 2 个单位的距离。

那么,假设:

  • 蓝色坐标系相较于黑色坐标系,在x方向上平移了 i 个单位的距离。
  • 蓝色坐标系相较于黑色坐标系,在y方向上平移了 j 个单位的距离。

这里我们就可以通过 (i, j) 来描述蓝色坐标系的平移距离。

坐标位置抽象化

我们可以这样理解 (3,2) 这个个坐标:

  • 蓝色坐标系 中, 红色点 在x轴坐标为 3。
  • 蓝色坐标系 中, 红色点 在y轴坐标为 2。

那么,假设:

  • 蓝色坐标系 中, 红色点 在x轴坐标为 x
  • 蓝色坐标系 中, 红色点 在y轴坐标为 y

这里我们就可以通过 (x, y) 来描述红色点在蓝色坐标系中的坐标。

分析总结

蓝色坐标系相对于黑色坐标系中平移的距离为(i,j)

红色点在蓝色坐标系的位置为(x, y)

红色点黑色坐标系 中位置计算为:

x + i = dstX
y + j = dstY

Tip

dstX和dstY为计算的结果,也就是 红色点黑色坐标系 中的位置。

数学推导

x + i = dstX
y + j = dstY

以上的计算公式我们也已经分析出来了。

数学分析

我们来进行数学转换一下:

1 * x + 0 * y + i * 1 = dstX
0 * x + 1 * y + j * 1 = dstY
0 * x + 0 * y + 1 * 1 = 1

我们采用矩阵表述方式如下:

\left[ \begin{matrix} 1 & 0 & i \\ 0 & 1 & j \\ \end{matrix} \right] \cdot \left[ \begin{matrix} x \\ y \\ \end{matrix} \right] = \left[ \begin{matrix} dstX \\ dstY \\ \end{matrix} \right]

问题

推导出来的结果为两个矩阵相乘得到一个新的矩阵。

我们这么来看问题:

A = \left[ \begin{matrix} 1 & 0 & i \\ 0 & 1 & j \\ \end{matrix} \right]
B = \left[ \begin{matrix} x \\ y \\ \end{matrix} \right]
C = \left[ \begin{matrix} dstX \\ dstY \\ \end{matrix} \right]

那么: $$ A \cdot B = C $$ 但是:

  • A 矩阵是一个两行三列的矩阵,记做(2, 3)
  • B 矩阵是一个两行一列的矩阵,记做(2, 1)

此时:

  • (2, 3)的矩阵是不可以和(2, 1)的矩阵相乘的,这个是不满足矩阵相乘的规则的。

因此:

  • 需要将这些矩阵补成齐次坐标矩阵

我们可以这么来看问题:

1 * x + 0 * y + i * 1 = dstX
0 * x + 1 * y + j * 1 = dstY
0 * x + 0 * y + 1 * 1 = 1

转换为新的公式为:

A = \left[ \begin{matrix} 1 & 0 & i \\ 0 & 1 & j \\ 0 & 0 & 1 \end{matrix} \right]
B = \left[ \begin{matrix} x \\ y \\ 1 \end{matrix} \right]
C = \left[ \begin{matrix} dstX \\ dstY \\ 1 \end{matrix} \right]

即: $$ A \cdot B = C $$ 此时:

  • A 矩阵为3行3列,记做(3, 3)
  • B 矩阵为3行1列,记做(3, 1)
  • C 矩阵为3行1列,记做(3, 1)
  • A * B 即 (3,3) * (3,1) 得到新的矩阵为(3,1)
  • 满足矩阵乘法

公式总结

\left[ \begin{matrix} dstX \\ dstY \\ 1 \end{matrix} \right] = \left[ \begin{matrix} 1 & 0 & i \\ 0 & 1 & j \\ 0 & 0 & 1 \end{matrix} \right] \cdot \left[ \begin{matrix} x \\ y \\ 1 \end{matrix} \right]

在坐标系平移问题上,我们可以通过数学公式进行计算得到相同点在不同坐标系中的表达。

  • dstX是需要计算出来的,点在当前坐标系中的x坐标
  • dstY是需要计算出来的,点在当前坐标系中的y坐标
  • i 是已知对应的坐标系相对与当前坐标系x方向平移的距离
  • j 是已知对应的坐标系相对与当前坐标系y方向平移的距离
  • x 是 点在对应坐标系中的x坐标
  • y 是 点在对应坐标系中的y坐标