线性代数-坐标系变换

问题描述:

已知一个全局坐标系,还有若干局部坐标系,如何将局部坐标系的坐标转成全局坐标系的坐标?反过来又如何进行?

这里的坐标系都是直角坐标系。

本文通过下面几个方面的研究来回答上面的问题。

1、简单示例

2、求解过程

3、nodejs编程验证

简单示例

已知点A(6,6),B(14,14),C(-2,14),G(12,12),求当A为原点 ,AB为X轴,AC为Y轴时 G点的坐标。可以见下图:

通过查看图形,我们可以很快的计算出点G新的坐标如下:

但是如果G为任意一点,我们还能轻松求出来么?显然我们不行。我们需要一种通用的方法来一次到位,这里就引入了矩阵变换的概念。

求解过程

重新理解坐标系的(x,y)。看下图:

我们的某个点的坐标实际上表达的是坐标轴单位向量的个数。x表示X轴单位向量个数,y表示Y轴单位向量个数。有了这个概念之后,我们重新来看待上面的问题:

假设AB单位向量为p(px,py),AC单位向量为q(qx,qy)。点G在新坐标系下为(x1,y1)

换成矩阵计算的写法:

由于AG向量可以很容易的求出来,单位向量p,q也很容易求出来,所以我们的新的坐标系下面的(x1,y1)也可以很容易求出来。通过逆矩阵变换可以求出下面公式:

就这样,我们通过重新理解坐标x和y的含义,通过引入了一个变换矩阵就轻松解决了坐标系的变换,是不是非常简单?这也是出乎我意料之外的,开始我也觉得好难好难。不过上述方法每次需要先求出AG的向量再进行计算,我们能否做到一步到位?当时答案是肯定的,我们通过引入一个三维矩阵,就可以轻松搞定。

我们将上述变换矩阵由二维扩展到三维,如下:假设A点的坐标为(Ax,Ay)。点G新坐标下(x1,x2),老坐标下(x0,y0)

这里我们换成三维矩阵的表达形式:

最左边的三维变换矩阵可以很容易求出来,那么我们可以根据G新坐标求出老坐标。再通过逆矩阵也可以根据老坐标求出新坐标。

总结:

解决这个问题非常简单只需要两步就搞定了。

第一步:我们需要求出新坐标系的x轴和y轴的单位向量,

第二步:构建一个三维变换矩阵,完成坐标的转换。

nodejs编程验证

这里通过编程的方式来验证变换矩阵的正确性,验证的示例就是上面简单示例。

这里矩阵计算我们采用gl-matrix库,github地址如下:

https://github.com/toji/gl-matrix

安装如下:这个库不需要再安装ts的定义,已经自带了。

npm i gl-matrix

第一步:定义点

let A = gl.vec3.fromValues(6, 6, 1)
let B = gl.vec3.fromValues(14, 14, 1)
let C = gl.vec3.fromValues(-2, 14, 1)
let G = gl.vec3.fromValues(12, 12, 1)

第二步:求新坐标系的X轴和Y轴的单位向量

let AB: gl.vec3 = gl.vec3.create()
let AC: gl.vec3 = gl.vec3.create()


gl.vec3.subtract(AB, B, A)
gl.vec3.subtract(AC, C, A)


let UnitAB: gl.vec3 = gl.vec3.create()
let UnitAC: gl.vec3 = gl.vec3.create()


gl.vec3.normalize(UnitAB, AB)
gl.vec3.normalize(UnitAC, AC)

第三步:构造计算矩阵

let mat = gl.mat3.fromValues(
  UnitAB[0],
  UnitAB[1],
  UnitAB[2],
  UnitAC[0],
  UnitAC[1],
  UnitAC[2],
  A[0],
  A[1],
  A[2]
)

第四步:求逆矩阵

let matInvert: gl.mat3 = gl.mat3.create()
gl.mat3.invert(matInvert, mat)

第五步:求新坐标系下的坐标G1

let G1: gl.vec3 = gl.vec3.create()
gl.vec3.transformMat3(G1, G, matInvert)

第六步:根据新求出的坐标反过来求原坐标系坐标G2

let G2 = gl.vec3.create()
gl.vec3.transformMat3(G2, G1, mat)

第七步:设置人工算出的值G3

let G3 = gl.vec3.fromValues(3 * Math.sqrt(8), 0, 1)

输出结果如下:验证矩阵变换结果符合预期

G:12,12,1
G1:8.485280990600586,0,1
G2:12,12,1
G3:8.485280990600586,0,1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在线性代数中,坐标系转换可以通过矩阵乘法来实现。假设有两个坐标系,分别为原坐标系和目标坐标系,它们之间的转换可以通过一个转换矩阵来描述。具体地,如果一个向量在原坐标系下的坐标为x,那么在目标坐标系下的坐标y可以通过以下公式计算:y = Tx,其中T为转换矩阵。转换矩阵的构造方法可以通过将原坐标系下的基向量表示为目标坐标系下的基向量的线性组合来实现。 ### 回答2: 在线性代数中,坐标系转换是指将一个向量的坐标表示从一个坐标系转换到另一个坐标系的过程。通常情况下,我们会遇到两种坐标系转换,即从一个标准坐标系转换到另一个标准坐标系,以及从一个自定义坐标系转换到另一个自定义坐标系。 对于标准坐标系之间的转换,首先需要确定两个坐标系之间的关系,通常通过一个变换矩阵来表示。假设我们有一个向量v=(x, y, z),需要将其从坐标系A转换到坐标系B。这个转换可以通过矩阵乘法来实现,即 v' = T * v,其中v'是在坐标系B中的表示,T是一个3x3的变换矩阵。变换矩阵T的具体形式取决于坐标系A与坐标系B之间的关系,常见的类型包括旋转、缩放和平移。 对于自定义坐标系之间的转换,我们可以通过两步来实现。首先,我们将向量从自定义坐标系A转换到标准坐标系,这需要使用一个变换矩阵,记作M_a。然后,我们再将这个向量从标准坐标系转换到自定义坐标系B,这需要使用另一个变换矩阵,记作M_b。所以,向量v在自定义坐标系A和坐标系B之间的转换可以表示为 v' = M_b * (M_a * v)。 总结起来,坐标系转换的过程就是将一个向量的坐标表示从一个坐标系转换到另一个坐标系。对于标准坐标系之间的转换,我们可以通过矩阵乘法来实现;对于自定义坐标系之间的转换,我们可以通过两次矩阵乘法来实现。这种转换过程在许多数学和工程领域都是非常重要的,例如计算机图形学、机器人学和机械工程等。 ### 回答3: 在线性代数中,坐标系转换是将一个向量或点从一个坐标系转换到另一个坐标系的过程。坐标系转换可分为两种情况:从源坐标系转换到目标坐标系,以及从目标坐标系转换回源坐标系。 想要进行坐标系转换,首先需要确定每个坐标系的基向量集合。基向量集合是一组线性无关的向量,它们构成了该坐标系的坐标轴。对于二维空间而言,基向量集合通常由两个向量组成,分别表示 x 轴和 y 轴的方向。对于三维空间,则由三个向量组成,表示 x 轴、 y 轴和 z 轴的方向。 以从源坐标系转换到目标坐标系为例,假设源坐标系的基向量为 {u1, u2},目标坐标系的基向量为 {v1, v2}。要将点 P 的坐标从源坐标系转换到目标坐标系,可以通过以下步骤进行: 1. 将点 P 表示为源坐标系基向量的线性组合:P = a1*u1 + a2*u2,其中 a1 和 a2 是点 P 在源坐标系中的坐标值。 2. 使用目标坐标系的基向量集合,将上述线性组合转换为目标坐标系下的坐标表示。即 P' = b1*v1 + b2*v2,其中 b1 和 b2 是点 P 在目标坐标系中的坐标值。 3. 基于矩阵表示,可以使用矩阵乘法将线性组合转化为目标坐标系下的坐标:[b1, b2] = [a1, a2] * [u1, u2]的逆 * [v1, v2]。 通过以上步骤,就可以将点 P 的坐标从源坐标系转换到目标坐标系。 同样,如果需要从目标坐标系转换回源坐标系,则需要进行逆过程,即根据目标坐标系的基向量集合和源坐标系的基向量集合,进行相反的矩阵乘法运算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值