2017-03-01 116 views
0

我正在尝试将Inkscape生成的长SVG路径分割成几条较小的路径。具体来说,我切断了这条路径:SVG:关于相对路径坐标的困惑

"m 42.333333,13.895833 c 0,21.166668 21.166666,19.843751 21.166666,19.843751 h 9.260417 c 0,0 19.84375,-11.906251 13.229166,7.9375 -6.614583,19.84375 -13.229166,31.75 -33.072916,21.166667 C 33.072916,52.260417 31.75,13.895833 31.75,13.895833" 

我的那一刻产生的输出是以下路径:

"M 42.333333,13.895833 c 0,21.166668 21.166666,19.843751 21.166666,19.843751" 
"M 63.499999,33.739584 l 9.260417,0" 
"M 72.760416,33.739584 c 0,0 19.84375,-11.906251 13.229166,7.9375 -6.614583,19.84375 -13.229166,31.75 -33.072916,21.166667" 
"M 39.6875,54.906251 c -6.61458400000001,-2.645834 -7.93750000000001,-41.010418 -7.93750000000001,-41.010418" 

这是不正确的。你可以看到输入和输出之间的区别here

正如您所看到的,几乎所有的点都是正确的,只是输出的第四个路径不是在原始路径的相应部分所在的同一点开始。这可能是由于我对SVG路径坐标的准确工作原理的一些错误造成的。

我到达起点(39.6875,54.906251)第四路径如下:

我们开始在(42.33333,13.895833)。然后我们曲线到相对位置(21.166666,19.843751),所以给我们绝对位置(42.33333 + 21.166666,13.895833 + 19.843751)=(63.499996,33.739584)。 然后用相对x坐标9.260417的水平线扩展路径。因此,给出了新的绝对位置(63.499996 + 9.260417,33.739584 + 0)=(72.760413,33.739584)。然后我们曲线到相对位置(-33.072916,21.166667)。给出第四条路径的起始位置为(72.760413-33.072916,33.739584 + 21.166667)=(39.6875,54.906251)(有一些舍入)。

为什么这是错的?

回答

0

我想出了自己。

该问题是由于第三条曲线实际上是由2条三次曲线组成的聚合器引起的。该第二立方贝塞尔的坐标应该相对于其起点而不是整个聚合器的起点。