Образцы, изообразцы и их влияние на контурные линии

Контурные линии, сгенерированные gnuplot, могут выглядеть довольно странно (неожиданно), если вы не установите соответствующие значения для samples и isosamples. Я часами пытался выяснить, как именно set samples и set isosamples влияют на внешний вид контурных линий, однако все, что я заметил, это то, что установка обоих на достаточно большие значения будет генерировать красивые контуры. Тем не менее, я хочу понять, как именно это работает.

  1. В чем разница между set samples и set isosamples в контексте контурных линий?
  2. Как set samples влияет на создание контурных линий?
  3. Как set isosamples влияет на создание контурных линий?

Например, рассмотрим следующий простой случай:

unset surface
set contour
set cntrparam levels discrete 10, 20
set samples 250, 2
set isosamples 2, 250
set view map
splot x**2 + y**2

Похоже, что для создания правильных контурных линий необходимо установить для первого параметра samples и второго параметра isosamples достаточно большие значения. Однако установка второго параметра samples и первого параметра isosamples на минимально возможное значение не повредит. Это не совсем интуитивно понятно. Так как же это работает?


person user1494080    schedule 09.07.2018    source источник


Ответы (1)


Во-первых, обсуждение того, для чего предназначены samples и isosamples. Это лучше всего при просмотре фактического графика, а не контурной карты.

samples используется для установки количества оценок функции по оси в отображаемом диапазоне. Для splot (трехмерных изображений) вы можете управлять выборками в обоих независимых направлениях x и y. Вот пример, в котором направление x имеет только 4 оценки, а направление y — 200:

reset
set xrange [-10:10]
set yrange [-10:10]
set xlabel 'X'
set ylabel 'Y'
set samples 4,200
splot x**2+y**2

На следующих двух изображениях обратите внимание, что в направлении x функция оценивается только 4 раза, и между ними проводятся прямые линии. В направлении Y он оценивается 200 раз и выглядит как «гладкие» кривые. Обратите внимание, что в обоих направлениях рисуется ровно 10 линий. Я доберусь до этого ниже, обсуждая изолинии.

Глядя на ось X: 4 сэмпла в направлении x

Глядя на ось Y: 200 образцов по оси Y


Таким образом, рисуется 10 линий в каждом направлении оси, потому что значение по умолчанию для изолиний в обоих направлениях x и y равно 10. Мы можем изменить это по желанию. Давайте увеличим выборки в обоих направлениях для красивых плавных кривых, но продемонстрируем изовыборки.

reset
set xrange [-10:10]
set yrange [-10:10]
set xlabel 'X'
set ylabel 'Y'
set samples 200,200
set isosamples 4,12
splot x**2+y**2

Обратите внимание на красивые плавные изгибы в обоих направлениях. По оси x имеется только 4 точки, где по оси y рисуются поверхностные кривые, а по оси y имеется 12 точек, где поверхностные кривые рисуются параллельно оси x.

пример изообразцов


Приведенные выше примеры демонстрируют основное назначение set samples и set isosamples. Они лишь косвенно влияют на контуры. В вашем случае вас интересует только контурная карта, даже не отображая график поверхности. Ключ к тому, как gnuplot рисует контуры, заключается в его объяснении того, как можно рисовать контуры с помощью дискретных данных.

Громаки:

Чтобы рисовать контуры, данные должны быть организованы как «данные сетки». В таком файле перечислены все точки одной изолинии y, затем все точки следующей изолинии y и так далее. Одна пустая строка (строка, не содержащая символов, кроме пробелов и возврата каретки и/или перевода строки) отделяет одну изолинию y от следующей.

Судя по этому объяснению, gnuplot предпочитает выбирать значение x и рисовать изолинию y. Мы можем сделать вывод, что когда gnuplot рисует контуры из функций, он выбирает значения x и рисует изолинии y. Следовательно, при наличии множества отсчетов x и множества изолиний y рисуются контуры с высоким разрешением, в то время как отсчеты y и изолинии x не имеют значения (если вы не рисуете поверхность).

person Dan Sp.    schedule 13.07.2018
comment
Y-изолиния — это линия, соединяющая точки, имеющие одинаковые координаты y (и, следовательно, разные координаты x). Что именно вы имеете в виду, когда выбираете значение x и рисуете изолинию y? - person user1494080; 13.07.2018
comment
Плохо сформулировано. Выбирает значения x для циклического перебора, поэтому вы хотите, чтобы образцы x были высокими, но для каждого x он рисует контуры, исследуя изолинии y, поэтому вы хотите, чтобы изосэмплы y были высокими. - person Dan Sp.; 13.07.2018