【发布时间】:2013-12-29 02:18:57
【问题描述】:
我需要解析 SVG(只是简单的事情),剩下要做的就是从矩阵变换中正确提取位置和角度。我知道这个问题已经被问过很多次,我相信我已经阅读了很多答案、文件等,但仍然无法正确处理。这是我设法准备的最简单的示例:
我创建了 1000x1000 的文档(所有数字以 px 为单位)并在 100,100 位置放置了一个 100x100 大小的矩形。它生成了以下 SVG 文件(我已经删除了样式属性和父标签)。文件中没有其他任何转换:
<rect
width="100"
height="100"
x="100"
y="100" />
然后我将矩形旋转了 33 度(使用“转换”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,angle: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(即 33 度)- 非常好
然而 x'=-90.72230563 和 y'=128.8770646 这正是让我感到困惑的地方——为什么不是 100,100?
【问题讨论】:
-
您在 Inkscape 中围绕哪个中心旋转正方形?另外,你能澄清一下
a、b、c、d、tx、ty、x和y在你的计算中是什么吗? -
好的,看来旋转是围绕正方形的中心。
标签: matrix svg transformation decomposition