построить цилиндрическую координату, используя файл x y в gnuplot

Я хотел бы сделать 3D-график с помощью gnuplot, используя файл interface.txt (Файл). Зная, что у меня есть инвариантность вращения по оси Y. На этом рисунке представлен 2D-раздел (график 'interface.txt' u 2:1) 2D-раздел

Вот что я хотел бы иметь с gnuplot, но я не знаю, как это построить. Я хотел бы получить эту картинку, но для тета = [0:2*pi]. введите здесь описание изображения Я попробовал этот код, но пока не знаю, как его построить

reset
set angles degrees
set mapping cylindrical

splot for [t=1:360:2] 'interface.txt' u t:1:(sqrt($2**2+$1**2))

Если у вас есть идеи? Спасибо !


person Suntory    schedule 11.05.2020    source источник
comment
ваши данные - открытая кривая. Его надо как-то закрыть? Если да, то как?   -  person theozh    schedule 13.05.2020
comment
да, я думаю, мы можем замкнуть кривую, используя pm3d. И, может быть, со специальными именами файлов и моим файлом данных мы сможем построить это...   -  person Suntory    schedule 13.05.2020


Ответы (2)


Я не уверен, что приведенный ниже пример соответствует вашим ожиданиям. Поскольку ваша исходная кривая не замкнута, это не тело, а поверхность. Чтобы pm3d выполнял «соединения» между повернутыми кривыми, я думаю, вам нужно добавить одну пустую строку между повернутыми кривыми. Вы можете получить это с помощью «трюка» построения фиктивного массива с одним элементом: plot A u ("") w table. Я надеюсь, что есть лучшие решения.

Код:

### rotation of a curve
reset session

set angle degrees
set table $Rotation
    array A[1]   # dummy array for plotting a single empty line
    do for [i=0:360:15] {
        plot "interface.txt" u ($2*cos(i)):($2*sin(i)):1 w table
        plot A u ("") w table
    }
unset table

set pm3d hidden3d depthorder

# set view equal xyz   # uncomment to have equal x,y,z scales
set view 30,50,1.3     # scale 1.3 to reduce white space around

splot $Rotation u 1:2:3 w pm3d lt -2 notitle
### end of code

Результат:

введите здесь описание изображения

person theozh    schedule 13.05.2020
comment
Большое спасибо ! почти идеально, теперь нам осталось только сомкнуть две поверхности, чтобы получилось одно тело - person Suntory; 13.05.2020
comment
Знаете ли вы, можно ли добавить заданную контурную базу с isosample и картой pm3d на плоскости xy? сохраняя при этом твердое 3D - person Suntory; 18.05.2020

Спасибо, почти идеально. Теперь он пытается закрыть мои 2 поверхности. введите здесь описание изображения

Итак, нам нужно связать край кривой, чтобы получить одно тело. Для этого я использую статистику:

введите здесь описание изображения

И затем окончательный код:

### rotation of a curve
reset session

set print $interface
stats 'interface.txt' nooutput
print sprintf("%g %g", STATS_max_y, STATS_pos_max_y)
print sprintf("%g %g", STATS_max_y, -STATS_pos_max_y)
set angle degrees
set table $Rotation
    array A[1]   # dummy array for plotting a single empty line
    do for [i=0:360:10] {
        plot "interface.txt" u ($2*cos(i)):($2*sin(i)):1 w table
    plot "interface.txt" u ($2*cos(i)):($2*sin(i)):(-$1) w table
    plot $interface u ($1*cos(i)):($1*sin(i)):2 w table
        plot A u ("") w table
    }
unset table

unset key
set border
set style fill solid 1.00 border -1
set view 62, 8, 1.245, 1.0

set ticslevel 0
set pm3d depthorder interpolate 4,4 lighting specular 0.6 at s

# set view equal xyz   # uncomment to have equal x,y,z scales

splot $Rotation u 1:2:3 w pm3d lt -2 notitle
### end of code

введите здесь описание изображения

person Suntory    schedule 13.05.2020
comment
рад, что это сработало. Тогда это должен быть принятый ответ, мой ответ был просто полезен ;-). Имейте в виду, что при создании блока данных с помощью set print $interface, когда вы закончите создание блока данных, используйте set print или unset print, чтобы остановить печать всего в этот блок данных. Если вы хотите что-то напечатать в окне консоли gnuplot. - person theozh; 14.05.2020