来自文件和参数球体的gnuplot曲线

时间:2018-10-19 09:18:47

标签: gnuplot

我正在尝试在3d空间中绘制来自文件和由参数项制成的球体的曲线。

这个想法是绘制行星地球和卫星轨道的图。

在文件x y z中定义轨道,并且gnuplot命令很简单

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

轨道卫星:

我找到了一个绘制地球的脚本

#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 :(得分:1)

为了生成下面的图,我使用了此blog post中链接的数据。现在,如果要将多个数据源组合到一个绘图中,则需要将一个或另一个转换为公共坐标系。如果卫星数据是在笛卡尔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.6b=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