将SVG矩阵变换值转换为x,y坐标

时间:2019-12-10 21:02:16

标签: math svg matrix graphics transformation

我正在处理SVG地图,其中包含{strong> 个text元素。问题是,旧的/源文件是多年前在Adobe Illustrator中生成的,出于某种原因,该文件将这些元素打印为例如:

<text transform="matrix(1 0 0 1 604.9754 765.0283)">4</text>

(前四个参数(1、0、0、1)永远不变。)

我想要实现的是将其翻译为类似的内容

<text x='123' y='456'>4</text>

我已经设法使用正则表达式收集了所有必需的值(文本内容和最后两个转换参数),但是我不知道下一步该怎么做。我也发现了

  

matrix()转换函数以六个值的转换矩阵形式指定一个转换。 matrix(a,b,c,d,e,f)等同于应用变换矩阵:

     

\ begin {pmatrix} a&c&e \\ b&d&f \\ 0&0&1 \ end {pmatrix}

     

通过以下矩阵等式将坐标从先前的坐标系映射到新的坐标系:

     

\ begin {pmatrix} x _ {\ mathrm {newCoordSys}} \\ y _ {\ mathrm {newCoordSys}} \\ 1 \ end {pmatrix} = \ begin {pmatrix} a&c&e \\ b&d &f \\ 0&0&1 \ end {pmatrix} \ begin {pmatrix} x _ {\ mathrm {prevCoordSys}} \\ y _ {\ mathrm {prevCoordSys}} \\ 1 \ end {pmatrix} = \ begin {pmatrix } a x _ {\ mathrm {prevCoordSys}} + c y _ {\ mathrm {prevCoordSys}} + e \\ b x _ {\ mathrm {prevCoordSys}} + d y _ {\ mathrm {prevCoordSys}} + f \\ 1 \ end {pmatrix}

所以我的问题是:

如何将这些矩阵转换值转换为X,Y坐标

1 个答案:

答案 0 :(得分:1)

我发现matrix(1 0 0 1 100px 200px)等同于translateX(100px) translateY(200px),这意味着这些值实际上是我一直在寻找的确切值。我之所以没有意识到这一点,是因为我没有对新图像进行调整(相乘,相加)。我还使用X作为反方向的Y坐标(哎哟)。我希望它可以帮助某人。