Как нарисовать круг в каждой точке в слоте gnuplot? - PullRequest
0 голосов
/ 25 октября 2019

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

set style data lines
splot 'data.dat'

За исключением того, что я хочу нарисовать круг в плоскости xy вместе с каждой нарисованной точкой, поэтомучто то, что будет отрисовано в конце, будет изогнутой трубкой с центральной линией внутри.

Мне удалось нарисовать отдельные круги, используя параметры, но я не уверен, как вы это сделаетечто я здесь описал.

Возможно ли это?

1 Ответ

1 голос
/ 25 октября 2019

Если вы действительно хотите круги, то следующее может быть решением, которое приходит мне в голову. Но, может быть, вы действительно хотите построить поверхность? Для этого могут быть другие решения.

Код:

### circles along datapoints
reset session

# create some 3D test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

Offset(i,axis) = real(word($Data[i],axis))

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      for [i=1:|$Data|] $Circle u ($1+Offset(i,1)):($2+Offset(i,2)):(Offset(i,3)) w l notitle
### end of code

Результат:

enter image description here

Добавление:

Вот немного измененная версия (возможно, есть более простой способ добиться этого), где вы создаете блок данных $Tube, которыйможет быть нанесен на поверхность с поверхностями. Круги все еще параллельны плоскости ху. Хотя я подозреваю, что на самом деле вы могли бы захотеть, чтобы круги были ортогональны направлению пути входных данных.

Код:

### circle surface along datapoints
reset session

# create some test data
set samples 50
set table $Data
    plot [0:1.5] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)):($1*10) w table
unset table

# define the circle
Radius = 0.1
set samples 24
set table $Circle
    plot [0:1] '+' u (cos(2*pi*$1)):(sin(2*pi*$1)) w table
unset table

D(i,axis) = real(word($Data[i],axis))
C(i,axis) = real(word($Circle[i],axis))

# generate "tube" datapoints
set print $Tube
do for [i=1:|$Circle|] {
    do for [j=1:|$Data|] {
        print sprintf("%.3f %.3f %.3f", C(i,1)+D(j,1), C(i,2)+D(j,2), D(j,3))
    }
    print ""  # empty line
}
set print
set pm3d depthorder noborder
set pm3d lighting specular 0.5

set view 65,124
splot $Data u 1:2:3 w lp pt 7 lw 2 lc rgb "red", \
      $Tube u 1:2:3 w pm3d notitle
### end of code

Результат:

enter image description here

...