Проблема импорта координат кривой Безье в Matlab из .svg - PullRequest
0 голосов
/ 11 июня 2019

Я пытаюсь нарисовать кривые Безье из файла .svg, используя Matlab.

Я открыл .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 output

Как это должно выглядеть:

Web browser output

Начальная и конечная точки в порядке, но контрольные точки кажутся неправильными ... 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

1 Ответ

0 голосов
/ 11 июня 2019

Спасибо @Paul LeBeau за ссылку. Оказывается, ".svg" чувствительны к регистру и что C не является c ... Вы изучаете вещи каждый день. Веб-сайт, на который я обращался за помощью, прежде чем опубликовать, не упомянул об этом.

2, 3 и 4 в этом случае относятся к 1. Я добавил несколько строк кода в свой сценарий, чтобы 2 = 1 + 2 относительно, 3 = 1 + 3 относительно и 4 = 1 + 4 относительно, и это работает!

Finished test piece

Теперь я могу, наконец, очистить свой код, чтобы одновременно выполнять как линии, так и пути, и рисовать свою гоночную линию.

NB. Я знаю, что точки для пурпурной кривой поменялись местами. Это связано с тем, что Illustrator не может сделать кривую "наоборот", не переключая точки ...

...