我需要解析SVG(只是简单的事情),剩下要做的就是从矩阵变换中正确提取位置和角度。我知道这个问题已被多次询问,我相信我已经通过了许多答案,文件等,但仍然无法正常处理。这是我设法准备的最简单的例子:
我创建了1000x1000文档(px中的所有数字)并在100,100位置放置一个100x100大小的矩形。它生成了以下SVG文件(我删除了样式属性和父标记)。文件中的任何地方都没有其他转换:
<rect
width="100"
height="100"
x="100"
y="100" />
然后我将矩形旋转了33度(使用'transform'inkscape工具)。 SVG代码看起来像这样:
<rect
width="100"
height="100"
x="-5.8952699"
y="157.49644"
transform="matrix(0.83867057,-0.54463904,0.54463904,0.83867057,0,0)" />
现在,我的目标是从矩阵中提取位置和角度,所以基本上我想要取回以下值:x:100,y:100,角度:33。为了做到这一点,我假设了以下公式:
sx=sqrt(a^2+b^2)
sy=sqrt(c^2+d^2)
t=atan(c/d) OR t=atan(-b/a)
t=acos(a) if MATRIX is PURE
x' = tx + sx*(COS(t)*x-SIN(t)*y)
y' = ty + sy*(SIN(t)*x+COS(t)*y)
结果是: t = 0.575958787(33deg) - 完美精细
然而 x'= - 90.72230563和y'= 128.8770646 这正是让我感到困惑的原因 - 为什么它不是100,100?
答案 0 :(得分:0)
以下是您可以找到坐标的方法。我在这里使用Python进行计算。
应用矩阵变换,旋转中心为(0,0)。坐标(-5.895,157.496)是正方形所需的位置,这样如果将旋转中心的旋转方向旋转33度(0,0),它将最终围绕其中心旋转33度。
首先,您似乎没有问题确定旋转角度。我们只关注如何找出这个位置。
让我们从我们所知道的开始:
Python 2.7.3 (default, Aug 1 2012, 05:14:39)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> c = math.cos(33 * math.pi / 180)
>>> s = math.sin(33 * math.pi / 180)
>>> c
0.838670567945424
>>> s
0.5446390350150271
>>> x0 = -5.8952699
>>> y0 = 157.49644
这些是方形左上角在旋转之前的坐标。正方形围绕其中心旋转,我们想要找出它的中心旋转到的位置:
>>> x1 = x0 + 50
>>> y1 = y0 + 50
>>> x1
44.1047301
>>> y1
207.49644
现在,旋转方块的中心:
>>> x2 = c * x1 + s * y1
>>> y2 = -s * x1 + c * y1
>>> x2
149.9999998927001
>>> y2
149.9999995401914
从这里可以清楚地看到,如果广场没有旋转,我们将如何到达广场的左上角。
>>> x3 = x2 - 50
>>> y3 = y2 - 50
>>> x3
99.99999989270009
>>> y3
99.9999995401914