【问题标题】:Problem importing Bezier curve coordinates in Matlab from .svg从 .svg 在 Matlab 中导入贝塞尔曲线坐标时出现问题
【发布时间】:2019-06-11 15:55:53
【问题描述】:

我正在尝试使用 Matlab 从 .svg 文件中绘制贝塞尔曲线。

我在文本编辑器中打开了 .svg。我正在尝试绘制的线条之一是:<path fill="none" stroke="#000000" stroke-miterlimit="10" d="M117.125,310.375c0-77.729,80.738-140.625,180.515-140.625"/>

如果我理解正确的话,起点是 (x , y) (117.125 , 310.375),第一个控制点是 (0 , -77.729),第二个控制点是 (80.738 , -140.625) 和终点点是(180.515,-140.625)。然而,这似乎不正确,因为我得到的输出与实际曲线相去甚远。

外观:

它应该是什么样子:

起点和终点都对了,但是控制点好像不对……Matlab画的点正确,我检查过了(轴可能看起来有点怪,但是是正确的)

我正在使用来自 Mathworks (https://blogs.mathworks.com/graphics/2014/10/13/bezier-curves/) 的代码。它需要起点pt1、控制点pt2和pt3以及终点pt4。

代码有效,问题似乎在于点的坐标。 我已经尝试在在线 .svg 编辑器中输入上面的坐标(它只支持整数,所以这里的每个坐标都是正数,控制点不应该“拉”曲线那么多,但输出与使用获得的相同MatLab):http://www.useragentman.com/tests/textpath/bezier-curve-construction-set.html#path=M%20297%2C%20169%20C%2058%2C%200%2C%2098%2C%2077%2C%2098%2C%20192&imageURL=http://www.useragentman.com/tests/textpath/images/grid.png

这是使用 Illustrator CS6 创建的整个文件:

    <?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="595.28px" height="841.89px" viewBox="0 0 595.28 841.89" enable-background="new 0 0 595.28 841.89" xml:space="preserve">
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="116.083" y1="608.292" x2="117.125" y2="310.375"/>
<path fill="none" stroke="#000000" stroke-miterlimit="10" d="M117.125,310.375c0-77.729,80.738-140.625,180.515-140.625"/>
<path fill="none" stroke="#000000" stroke-miterlimit="10" d="M297.64,169.75c58.959,0,98.652,77.535,98.652,192.708"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="396.292" y1="362.458" x2="387.958" y2="653.083"/>
</svg>

我真的希望有人可以帮助我解决这个问题。我是 .svg 的新手

【问题讨论】:

  • 我不小心给出了错误的 matlab 图,所以起点和终点与我帖子中的不匹配。对此感到抱歉。
  • Matlab 图形图像已更新。但问题仍然存在。
  • 我很抱歉对你有点暴躁,但我们看到很多这样的问题。在您开始制作屏幕截图和编译这篇文章之前,您是否考虑过阅读 SVG 规范?如果你有,你会节省很多时间。它有很大一部分是关于 path definitions 如何工作的。当您阅读该部分时,您的贝塞尔曲线为什么不起作用的答案几乎立即显而易见。

标签: matlab svg bezier curve adobe-illustrator


【解决方案1】:

感谢@Paul LeBeau 提供链接。事实证明,“.svg”是区分大小写的,而且 C 不是 c……你每天都在学习。我在发布之前查看的寻求帮助的网站没有提到这一点。

在这种情况下,2、3 和 4 都与 1 相关。我在我的脚本中添加了几行代码,这样 2 = 1 + 2relative、3 = 1 + 3relative 和 4 = 1 + 4relative 就可以了!

现在我终于可以清理我的代码来同时处理线路和路径并绘制我的赛车线了。

注意:我知道紫色曲线的点是相反的。这是因为 Illustrator 无法在不切换点的情况下“反向”绘制曲线...

【讨论】:

  • 如果您查看的网站没有提到这一点,那是一个巨大的疏忽,您应该联系所有者来解决这个问题。 SVG 路径指令在所有地方都有很好的文档记录,这种情况差异对于编写可管理的路径指令是至关重要的。另请注意,您不需要 10 rep 即可使用正常的降价图像语法。只需将您的图片上传到任何允许盗链的网站(如 imgur.com),然后使用![alt text](url) 而不是尝试拖放图片。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-18
  • 2021-09-10
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
相关资源
最近更新 更多