SVG";“移动”;命令:绝对路径到相对路径

SVG";“移动”;命令:绝对路径到相对路径,svg,relative-path,absolute-path,inkscape,Svg,Relative Path,Absolute Path,Inkscape,我有一个在Inkscape中创建的SVG路径,它是一个Move(“M…z”)命令。根据SVG规范,大写字母“M”表示绝对路径,但是对于我的应用程序,我需要相对路径 将绝对路径转换为相对路径的算法是什么?我是否从最后的x和y坐标开始,分别减去之前的值,直到到达值的开始?以下各项的奖励分数: 为我将路径转换为相对路径(meh) 提供指向某种资源的链接,该资源将在绝对SVG路径和相对SVG路径之间转换,或者指出如何使用Inkscape实现这一点(我搜索了邮件列表,发现其他用户谈论必须从源代码重新编译

我有一个在Inkscape中创建的SVG路径,它是一个Move(“M…z”)命令。根据SVG规范,大写字母“M”表示绝对路径,但是对于我的应用程序,我需要相对路径

将绝对路径转换为相对路径的算法是什么?我是否从最后的x和y坐标开始,分别减去之前的值,直到到达值的开始?以下各项的奖励分数:

  • 为我将路径转换为相对路径(meh)
  • 提供指向某种资源的链接,该资源将在绝对SVG路径和相对SVG路径之间转换,或者指出如何使用Inkscape实现这一点(我搜索了邮件列表,发现其他用户谈论必须从源代码重新编译才能手动添加选项:|)
  • 给jquery一个将aboslute转换为relative的线性语句,反之亦然
所讨论的路径是一种类似星暴的爆炸:

M 9.6428572,4.8214285 17.857142,19.285714 0.89285714,22.142857 17.678572,29.285714 1.9642857,41.071429 23.75,37.678572 26.071429,49.285714 37.321428,38.75 47.5,48.392857 51.607143,37.5 61.964286,48.214286 62.321429,34.285714 78.392857,37.857143 64.107143,24.464286 81.071428,21.607143 63.928571,17.857143 70.535714,3.5714284 54.821429,12.142857 50,1.2499999 40.535714,10.714286 31.607143,0.89285704 28.035714,13.928571 z
我搜索过类似的问题,但只找到了关于操作系统路径或相对于绝对SVG路径的问题(他们中没有人专门询问这样做的算法)。如果这是一个复制品,请随意关闭它


谢谢

EDIT:我现在有一个在线程序来做这项工作:

您想要的路径是:

d="m9.6428572,4.8214285 8.214285,14.464285 -16.964285,2.857143 16.785715,7.142857 -15.714286,11.785715 21.785714,-3.392857 2.321429,11.607142 11.249999,-10.535714 10.178572,9.642857 4.107143,-10.892857 10.357143,10.714286 0.357143,-13.928572 16.071428,3.571429 -14.285714,-13.392857 16.964285,-2.857143 -17.142857,-3.750000 6.607143,-14.285715 -15.714285,8.571429 -4.821429,-10.892857 -9.464286,9.464286 -8.928571,-9.821429 -3.571429,13.035714z"/>
我想你可以从最后一个坐标对开始,然后向后工作,从第二个坐标对开始,减去前一个坐标对,这很容易(而且效率更高,因为你不必重复查找相同的值)

我用Python实现了这一点,但我相信使用Javascript可以相对轻松地实现这一点

d = "9.6428572,4.8214285 17.857142,19.285714 0.89285714,22.142857 17.678572,29.285714 1.9642857,41.071429 23.75,37.678572 26.071429,49.285714 37.321428,38.75 47.5,48.392857 51.607143,37.5 61.964286,48.214286 62.321429,34.285714 78.392857,37.857143 64.107143,24.464286 81.071428,21.607143 63.928571,17.857143 70.535714,3.5714284 54.821429,12.142857 50,1.2499999 40.535714,10.714286 31.607143,0.89285704 28.035714,13.928571"
c = [map(float,l.split(',')) for l in d.split()]
c2 = ["%.6f,%.6f" % (c[n][0] - c[n-1][0], c[n][1] - c[n-1][1]) for n in range(1, len(c))]
print "%.6f,%.6f " % (c[0][0], c[0][1]) + ' '.join(c2)

算法应该用哪种编程语言编写?伪代码很好,我只是想了解一下您使用的一般方法。我已经证实了我的怀疑——你从最后一个坐标对开始,每次向后减去前一个位置。然而,jQuery一行程序仍然很有趣:PI喜欢您的答案,因为它与我提出的相对路径匹配,并且因为Python四行程序很酷:P感谢您确认必须减去前面的条目才能将其转换为相对路径。要转换为相对->绝对值,您是否只需添加上一个条目,从第一个条目开始并在列表中进行操作?是的,它将是一个累积和。所以第二个绝对坐标是第1+2个相对坐标;第三个绝对坐标是第二个绝对坐标(第一个+第二个相对坐标)+第三个相对坐标,依此类推。希望这是有道理的,确实有道理。谢谢@peter Collingge