Проблемы с gnuplot для построения некоторых изображений с 3D-графиком - PullRequest
0 голосов
/ 01 апреля 2020

Итак, я сделал небольшой код для печати некоторых точек на сферической поверхности и заставил его также найти все позиции центра масс всех напечатанных точек (каждый раз, когда он печатает точку, он пересчитывает положение центр массы). Позиции центра масс были напечатаны в одном файле с i (это было количество точек, напечатанных до этого момента) и координатами x, y и z. И на основе сценария, сделанного моим профессором, я сделал этот сценарий ниже для запуска с gnuplot, чтобы создать ряд изображений с шариком, который перемещается вокруг позиций центра масс, и в конце я мог сделать видео с images.

set terminal pngcairo size 1080,1080

set view equal xyz
fx(t)= system(sprintf("sed -n '%d p' ../dat/cm.dat | cut -f2 -d' '", t))
fy(t)= system(sprintf("sed -n '%d p' ../dat/cm.dat | cut -f3 -d' '", t))
fz(t)= system(sprintf("sed -n '%d p' ../dat/cm.dat | cut -f4 -d' '", t))
unset xtics
unset ytics
unset ztics

t= 1
while(t <= 100000){
    set output sprintf("%d.png", t/10)
    set object circle at fx(t), fy(t), fz(t) size 0.35 fc rgb "#000000" fillstyle solid 1.0
    splot "../dat/cm.dat" u 2:3:4 w l lc rgb "#FFFFFF" t""
    unset object
    t= t+10
}
unset terminal
unset output

Проблема, которая привела меня сюда, я перепробовал все, что пришло мне в голову, но каждый раз, когда я запускаю скрипт, печатается шар, который должен перемещаться вокруг позиций центра масс. настолько гигантский, что почти невозможно увидеть движение, вы можете увидеть проблему с размером здесь . Так что, если кто-то знает, в чем проблема, я буду благодарен. enter image description here

ps: Может быть, это вообще не важно, но извините за мое письмо, я не очень знаком с engli sh.

1 Ответ

0 голосов
/ 01 апреля 2020

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

...
set output sprintf("%d.png", t/10)
splot "../dat/cm.dat" u 2:3:4 w l lc rgb "#FFFFFF" t""
...

Добавление:

Я думаю, я до сих пор не понимаю вашу проблему. Мое понимание до сих пор: у вас есть огромный файл данных для столбцов: i,x,y,z. И x,y,z описывают движение в 3D. В конце концов, вы хотите оживить это движение с помощью сферы или круга, правильно? А ваша проблема в том, что эта сфера слишком велика? Затем уменьшите размер, например, вместо size 0.35 try size 0.05.

Может быть, в следующем (другом) примере мы подойдем (итеративно) ближе к тому, что вы хотите. Кстати:

  1. Я не вижу необходимости в sed, это можно сделать с помощью gnuplot
  2. Вы можете создать анимированный GIF с помощью gnuplot

Это всего лишь предположение, я мог ошибиться. Просто дайте мне знать.

Код:

### animated movement in 3D
reset session

set term gif animate delay 10 optimize
set output "myAnimation.gif"

# create some test data
set print $Data 
    x0 = y0 = z0 = 0
    do for [i=1:200] {
        x0=x0+rand(0)-0.5; y0=y0+rand(0)-0.5; z0=z0+rand(0)-0.5
        print sprintf("%d %.3f %.3f %.3f",i,x0,y0,z0)
    }
set print

do for  [i=0:199] {
    splot $Data u 2:3:4 w l lc rgb "blue" notitle, \
          '' u 2:3:4 every ::i::i w p pt 7 ps 2 lc rgb "red" notitle
}
set output
### end of code

Результат:

enter image description here

...