Странное поведение при построении параметров c функций (или их соответствующих блоков данных) при использовании линий - PullRequest
0 голосов
/ 30 апреля 2020

У меня странное поведение при отображении параметров c функций и / или их соответствующего блока данных при использовании линий.
Кажется, что график не подчиняется linestyle (строка 1), в то же время по умолчанию linetype применяется, кажется, обратное, когда сравнение графиков происходит из функций или блока данных (строка 2). Любопытно, что сюжет, кажется, наследует linewidth от linestyle (строка 3). Только при использовании linecolor (строка 4) графики выглядят корректно.

result

Вот код, протестированный под 5.2.8 и 5.4 rc1 версии:

reset

set terminal pngcairo size 750,9.0 font ",10"
set output "parametric.png"

unset tics
unset border
set view equal xyz
set view ,,2
set view 100,30
set xyplane 0
set hidden3d

set parametric
set urange [0:2*pi]
set vrange [0:pi/2]

set style line 1 lc "red" lw 2

f(u,v) = cos(u)*cos(v)
g(u,v) = sin(u)*cos(v)
h(v)   = sin(v)

set table $hemisphere
    splot f(u,v), g(u,v), h(v)
unset table

set multiplot layout 4,2 columnsfirst
    splot f(u,v), g(u,v), h(v) w l ls -1 t "Using functions (with ls -1 )"
    splot f(u,v), g(u,v), h(v) w l lt  3 t "Using functions (with lt 3)"
    splot f(u,v), g(u,v), h(v) w l ls  1 t "Using functions (with custom ls 1)"
    splot f(u,v), g(u,v), h(v) w l lc "red" t "Using functions (with lc 'red')"
    splot $hemisphere w l ls -1 t "Using datablock (with ls -1)"
    splot $hemisphere w l lt  3 t "Using datablock (with lt 3)"
    splot $hemisphere w l ls  1 t "Using datablock (with custom ls 1)"
    splot $hemisphere w l lc "red" t "Using datablock (with lc 'red')"
unset multiplot 

Кроме того, если вы внимательно посмотрите на поверхность, у нее есть перевернутый отрезок.

close 1 close 2

Что здесь происходит? Я что-то упустил?

1 Ответ

2 голосов
/ 30 апреля 2020

Основа c причина: Из документов (выбранный текст из help hidden3d)

Syntax:
       set hidden3d {defaults} |
                    {{offset <offset>} | {nooffset}}
[...]

The first option, `offset`, influences the linetype used for lines on the
'back' side.  Normally, they are drawn in a linetype one index number higher
than the one used for the front, to make the two sides of the surface
distinguishable.  You can specify a different linetype offset to add
instead of the default 1, by `offset <offset>`.  Option `nooffset` stands for
`offset 0`, making the two sides of the surface use the same linetype.

Обратите внимание, что нет упоминания стилей линий, в отличие от типов линий. Алгоритм hidden3d выполняет сложный процесс назначения цветов отдельным отрезкам, который явно основан на числовом типе линий. Генерация образца строки в ключе более обобщенная c. Очевидно, что он не в точности дублирует то, что происходит, если hidden3d активен, поэтому давайте назовем это большой ошибкой.

Неправильный цвет для одного отрезка: Я думаю, это должно быть из-за округления ошибка где-то. Минутные изменения угла обзора или даже размера терминала приводят к удалению артефакта go.

Ничего не помогает, но объясняет, почему вы так видите: В gnuplot 5 использование типов линий в значительной степени дополнило старый механизм стилей линий. Существует частичная обратная совместимость с помощью команды set style increment user, которая срабатывает во многих местах, где программе приходится выбирать цвет для «следующей вещи», какой бы она ни была. Но он не охватывает все места, где задействованы несколько цветов, и hidden3d является одним из таких мест.

...