SVG "Move"命令 : Absolute path to Relative Path

标签 svg relative-path absolute-path inkscape

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

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

  • 将路径转换为相对路径(meh)
  • 提供某种资源的链接,该资源将在绝对和相对 SVG 路径之间进行转换,或者指出如何使用 Inkscape 执行此操作(我搜索了邮件列表,发现其他用户正在谈论必须从源代码重新编译为手动添加选项:|)
  • 提供一个jquery单行代码,将绝对值转换为相对值,反之亦然

所讨论的路径是一种爆炸​​式的星爆:

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 路径的问题(并且没有一个人专门询问这样做的算法)。如果这是重复的,请随时将其关闭。

谢谢!

最佳答案

编辑:我现在有一个在线程序可以更普遍地执行此操作: http://petercollingridge.appspot.com/svg_transforms

你想要的路径是:

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)

关于SVG "Move"命令 : Absolute path to Relative Path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6600394/

相关文章:

html - 将鼠标悬停在圆圈上以增加大小,文字也会增加

javascript - 在单元格上的两篇论文之间拖放 - JointJs

playframework-2.0 - 生产环境中playframework 2.3.6中的相对路径

java - 如何在不使用绝对路径的情况下使用 log4j.properties 为 Java Web 服务创建日志文件

java - 获取给定文件夹下文件的所有绝对路径

.net - ASP.NET MVC - 从 Controller 查找 App_Data 文件夹的绝对路径

javascript - 增加 d3 SVG 容器大小

javascript - 导出内联 svg 对象(IE 问题)

jquery 父、子的简写

c++ - 如何在 C++ 中打开具有相对路径的文件?