3d сетка адаптирована к непрямоугольным данным в gnuplot

Я хотел бы построить точки на трехмерном графике и создать меш, который может обрабатывать непрямоугольные данные. Чтобы быть более конкретным, мои данные

data.dat

-1 0 0
-1 1 0
0 -1 0
0 0 0
0 1 0
1 -1 0
1 0 0

и мой файл gnuplot

plot.plt

set dgrid3d 3,3
splot 'data.dat' w l
pause -1

к несчастью dgrid3d кажется, делает мои данные прямоугольными, и строится прямоугольная сетка (фактически квадратная сетка). Есть ли способ построить ограниченный конверт моих данных? В идеале я хотел бы построить ортогональную выпуклую оболочку моего набора точек.

1 ответ

Решение

У вас есть несколько вариантов сделать что-то подобное - к сожалению, все они требуют некоторой работы с вашей стороны.

Во-первых, важно отметить, что gnuplot может обрабатывать непрямоугольные сетки для построения поверхности (даже если для этого примера вам нужна только прямоугольная поверхность). Для построения поверхности файл данных выглядит следующим образом (обратите внимание на пустые записи):

x11 y11 z11
x21 y21 z21
x31 y31 z31
...

x12 y12 z12
x22 y22 z22
x23 y23 z23
...

Затем он образует четырехугольники. В этом случае первый четырехугольник будет сформирован из точек (x11,y11),(x21,y21),(x12,y12),(x22,y22). Второй четырехугольник будет образован из (x21,y21),(x31,y31),(x22,y22),(x23,y23) и так далее. Таким образом, учитывая ваш набор точек, вы можете легко создать "прямоугольную сетку", которая будет содержать все ваши точки данных. Это не будет равномерно, но это не проблема, как все. Теперь нам нужно выяснить, как удалять точки, чтобы gnuplot не рисовал их. Это и есть "хитрость". Вы можете пометить конкретную строку как "отсутствующие данные" в файле данных (set datafile missing "string"). В этом случае gnuplot не будет отображать эту точку, но все равно будет отслеживать координаты отсутствующих данных для создания поверхности.

В итоге ваш файл данных будет выглядеть примерно так:

x11 y11 ?
x21 y21 ?
x31 y31 z31
...

x12 y12 ?
x22 y22 z22
x23 y23 z23
...

и сценарий для его построения будет:

set datafile missing '?'
set surf
set view map #Not sure about this...depends on the view you want
splot "mydata.dat" u 1:2:3 w lines

Если вы хотите, чтобы gnuplot вычислил "ортогональную выпуклую оболочку", я думаю, вам не повезло.

ЛЕГКИЙ ПУТЬ

Также обратите внимание, что если вы хотите получить сплошной цветной объект в 2-мерном пространстве (например, изображение на размещенной вами ссылке в википедии), эта проблема становится значительно проще. Если вы можете создать файл данных только с вершинами объекта, который вы хотите нарисовать (для того, чтобы (x1,y1) соединялся с (x2,y2) соединялся с (x3,y3)...), то вы можете построить график этот файл данных как:

set fillstyle #However you want the object to appear
plot "datafile.dat" u 1:2 with filledcurves closed
Другие вопросы по тегам