кривая гнуплота из файловой и параметрической сферы - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь построить в трехмерном пространстве кривую, исходящую из файла, и сферу, сделанную с параметрическими записями.

Идея состоит в том, чтобы построить планету Земля и орбиту спутника.

Орбита определяется в файле xyz, а команды gnuplot - это просто

splot 'file.txt' u 1:2:3 title 'Orbit element 1' with lines

Спутник орбиты:

Iнашел скрипт для построения Земли

#color definitions
set border lw 1.5
set style line 1 lc rgb '#000000' lt 1 lw 2
set style line 2 lc rgb '#c0c0c0' lt 2 lw 1
unset key; unset border 
set tics scale 0
set lmargin screen 0
set bmargin screen 0 
set rmargin screen 1
set tmargin screen 1 

set format ''
set mapping spherical
set angles degrees

set xyplane at -1
set view 56,81

set parametric

set isosamples 25
set urange[0:360]
set vrange[-90:90]
r = 0.99
splot r*cos(v)*cos(u),r*cos(v)*sin(u),r*sin(v) with lines linestyle 2,'world.dat' with lines linestyle 1
unset parametric

К сожалению, я не могу смешать сплот с файлом данных и сплот с параметрическим параметром..

Любые предложения приветствуются!Спасибо

1 Ответ

0 голосов
/ 19 октября 2018

Чтобы создать график ниже, я использовал данные, ссылки на которые есть в этом блоге .Теперь, если мы хотим объединить несколько источников данных в один график, нам нужно будет преобразовать один или другой в общую систему координат.Если спутниковые данные представлены в декартовых координатах x, y, z, возможно, самым простым решением было бы также преобразовать карту мира в декартовую систему.

Это можно сделать, как показано ниже.Параметр R обозначает радиус сферы, на поверхности которой Gnuplot рисует карту мира.Он должен быть немного больше, чем r, чтобы hidden3d работал.Столбцы в файле world_110m.txt имеют значения долготы (первый столбец) и широты (второй столбец), поэтому преобразование дается как (R*cos($1)*cos($2)):(R*sin($1)*cos($2)):(R*sin($2)).В файле input.pnts.dat я только что сгенерировал координаты точек на эллипсе с поворотом a=1.6 и b=1.2 вокруг оси x на 45 градусов (против часовой стрелки).Для реальных спутниковых данных необходимо изменить масштаб координат путем деления на радиус Земли, т. Е. Использовать ($1/Re):($2/Re):($3/Re) вместо 1:2:3, где Re обозначает радиус в любых единицах измерения, которыми являются ваши данные (вероятно, в метрах, если судитьпервым сюжетом в вашем вопросе).

set terminal pngcairo
set output 'fig.png'

set xr [-2:2]
set yr [-2:2]
set zr [-2:2]

#color definitions
set border lw 1.5
set style line 1 lc rgb '#000000' lt 1 lw 2
set style line 2 lc rgb '#c0c0c0' lt 2 lw 1

unset key; unset border; set tics scale 0

set format ''
set angles degrees

set xyplane at -1
set view 56,81

set lmargin screen 0
set bmargin screen 0 
set rmargin screen 1
set tmargin screen 1 

set parametric
set isosamples 25
set urange[0:360]
set vrange[-90:90]
r = 0.99
R = 1.00

set hidden3d

#since we are using Cartesian coordinates, we don't want this
#set mapping spherical

splot \
  r*cos(v)*cos(u),r*cos(v)*sin(u),r*sin(v) with lines linestyle 2, \
  'world_110m.txt' u (R*cos($1)*cos($2)):(R*sin($1)*cos($2)):(R*sin($2)) w l lw 2 lc rgb 'black', \
  'input.pnts.dat' u 1:2:3 w l lw 2 lc rgb 'red'

Это дает: enter image description here

...