Можно ли построить круг в терминале svg gnuplot с помощью команды circle svg? - PullRequest
0 голосов
/ 15 июня 2019

Я хотел бы нарисовать семейство кругов , используя gnuplot svg терминал .

enter image description here

Для этого у Svg есть командный круг .Все изображения, которые я нашел, используют svg path не круг, но круг лучше, потому что он требует меньшего размера ( оптимизация ).

В в gnuplotисходный код Я не нашел ни одной команды для использования svg circle

grep -nR "circle"

Возможно ли построить круг в gnuplot, который дает команду svg circle not path?

Ответы [ 3 ]

2 голосов
/ 16 июня 2019

Типы точек 5 и 6 реализованы как

     /*  5 circle */
     "\t<circle id='gpPt5' stroke-width='%.3f' stroke='currentColor' cx='0' cy='0' r='1'/>\n"
     /*  6 circle (disk)         filled */
     "\t<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>\n"

Таким образом, в принципе, вы можете разместить множество точек, изменяя положение x, y и размер каждой из них.На практике это было бы обременительно, поскольку единицы измерения «размера точек» не связаны с координатами оси графика.Вам придется эмпирически определить масштабный коэффициент, и он изменится, если вы измените что-либо в отношении размера или компоновки графика.

Вот пример принципа проверки:

unset border
unset tics
set size square
set angle degree
plot sample [t=0:720] '+' using ($1*cos($1)):($1*sin($1)):($1/100.) with points pt 6 ps var

enter image description here

1 голос
/ 23 июня 2019

хорошо, SVG-файл - это в основном текстовый файл.Таким образом, каждая программа, которая может выполнять некоторые вычисления и экспортировать некоторый текст, в принципе может создать такой файл SVG.Одна попытка ... (для оптимизации).По сути, я начал с файла Inkscape SVG с одним кружком, чтобы получить текст вокруг фактического круга.Теперь gnuplot генерирует этот «Верхний колонтитул» и «Нижний колонтитул» и последовательность окружностей.

Код:

### generate svg output
reset session

Header = \
'<?xml version="1.0" encoding="UTF-8"?> '."\n".\
'<!-- Created with Inkscape (http://www.inkscape.org/) --> '."\n".\
'<svg width="200mm" height="200mm" version="1.1" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> '."\n".\
' <metadata> '."\n".\
'  <rdf:RDF> '."\n".\
'   <cc:Work rdf:about=""> '."\n".\
'    <dc:format>image/svg+xml</dc:format> '."\n".\
'    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> '."\n".\
'    <dc:title/> '."\n".\
'   </cc:Work> '."\n".\
'  </rdf:RDF> '."\n".\
' </metadata> '

CircleTemplate = \
' <circle cx="'.'%g'.'" cy="'.'%g'.'" r="'.'%g'.'" fill="none" stroke="#f00" stroke-linecap="round" stroke-width=".1" style="paint-order:stroke markers fill"/> '

Footer = ' </svg> '

set print "Circles.svg"
    print Header
    Max = 90.
    Factor1 = 12.
    Factor2 = 2.5
    do for [i=5:Max] {
        print sprintf(CircleTemplate,100+Factor2*i/Max*cos(i*pi/Max*Factor1),100+Factor2*i/Max*sin(i*pi/Max*Factor1),i)
    }
    print Footer
set print
### end of code

Результат:

enter image description here

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

Это невозможно.Я сделал запрос функции .

...