如果我有一个SVG矩形,
[x1,y1,x2,y2] = [ 456.079, 402.645, 514.841, 527.925 ]
及其SVG矩阵
[0, 1, -1, 0, 58.7617, 0]
如何计算矩形的x, y, w, h
?
答案 0 :(得分:0)
矩阵是直接2D均匀3x3变换矩阵,其中最后3个丢失元素隐式(0,0,1)
,因为SVG中没有投影。它基本上是this的2D版本。
因此,您需要实现3x3矩阵* 3D向量乘法V'= M * V,其中矩阵M
是您的6个值+ (0,0,1)
,而3D向量V
是{{1} }结果为(x',y',w),您可以忽略(x,y,w=1)
。因此,当以代码编写(取自几年前我写的我的C ++ SVG解码器/编码器)来转换顶点时,只需执行以下操作:
w'
如果您也有电子秤,则:
x'=M[4]+(M[0]*x)+(M[2]*y);
y'=M[5]+(M[1]*x)+(M[3]*y);
位置:
x'=M[4]+scalex*((M[0]*x)+(M[2]*y));
y'=M[5]+scaley*((M[1]*x)+(M[3]*y));
此外,如果您要转换向量(或宽度,高度,半径之类的尺寸)而不是顶点,请使用M[6]={ 0, 1, -1, 0, 58.7617, 0 };
,以便代码忽略偏移量:
w=0
如果您也有电子秤,则:
x'=(M[0]*x)+(M[2]*y);
y'=(M[1]*x)+(M[3]*y);
因此,将位置x'=scalex*((M[0]*x)+(M[2]*y));
y'=scaley*((M[1]*x)+(M[3]*y));
转换为具有偏移量,而将(x1,y1)
转换为不偏移(作为其宽度,高度)。
(x2,y2)
如果您的SVG对象父对象具有更多矩阵,则也需要按顺序应用它们。