2016-07-19 4 views
1

Я хочу построить трехмерный график с дискретными точками, которые получены некоторыми математическими выражениями и значениями в столбцах файла данных. Мой текущий файл Gnuplot выглядит следующим образом:gnuplot mix parameter и datafile 3D plot

set encoding utf8 
set terminal postscript enhanced color 
set output "3D.eps 
set nokey 
set parametric 

set xlabel "X" 
set ylabel "Y" 
set zlabel "Z" 

set title "So cool 3D plot" 

fx = ($3) * (1 - ($4) * cos(u)) *(cos(($7)*pi/180)*cos(($6)*pi/180) - sin(($7)*pi/180)*sin(($6))*cos(($5)*pi/180)) 
fy = ($3) * (1 - ($4) * cos(u)) *(cos(($7)*pi/180)*sin(($6)*pi/180) + sin(($7)*pi/180)*cos(($6)*pi/180)*cos(($5)*pi/180)) 
fz = ($3) * (1 - ($4) * cos(u)) *(sin(($7)*pi/180) * sin(($5)*pi/180)) 

plot [u=0:2*pi] "file.txt" u fx:fy:fz t "yey" 

В основном информационный поток, как это:

1.) Загрузите file.txt и извлекать значения, которые находятся в разных coloumns

2 .) Вывести координату x с использованием уже прочитанных значений. Х-координата тогда зависит от переменной «времени» 'u'

3.) Вывести y-координату с использованием уже введенных значений. Затем координата y также зависит от «временной» переменной «u»

4.) Вывести z-координату с использованием уже принятых значений. Z-координата тогда также зависит от «временной» переменной «u»

5.) график для каждой строки в «file.txt» x, y, z-точки для u = 0 ... 2pi

Это как комбинация параметрического и файла данных. Однако мой сюжетный файл, похоже, не работает ... может кто-нибудь мне помочь?

веселит,

Andre

ответ

1

Четыре проблемы: 1/в using, вам нужно скобки вокруг любого выражения, которое не является числом cloumn. 2/При определении функции он должен явно зависеть хотя бы от одного параметра. 3/Ссылка на столбцы $ не может использоваться в функции, либо передать ее в качестве аргумента, либо использовать процедуру column. 4/а for петля нужна целая переменная

Один вариант, чтобы исправить все это:

fx(u) = (column(3)) * (1 - (column(4)) * cos(u)) *(cos((column(7))*pi/180)*cos((column(6))*pi/180) - sin((column(7))*pi/180)*sin((column(6)))*cos((column(5))*pi/180)) 
fy(u) = (column(3)) * (1 - (column(4)) * cos(u)) *(cos((column(7))*pi/180)*sin((column(6))*pi/180) + sin((column(7))*pi/180)*cos((column(6))*pi/180)*cos((column(5))*pi/180)) 
fz(u) = (column(3)) * (1 - (column(4)) * cos(u)) *(sin((column(7))*pi/180) * sin((column(5))*pi/180)) 

plot [u=0:20] "file.txt" u (fx(pi*u/10.)):(fy(pi*u/10.)):(fz(pi*u/10.)) t "yey" 

Но вы не будете в состоянии соединить точки линией между различными значениями и, как for loop - это «внешность» точек цикла в файле данных.

+0

Спасибо, что сделал трюк! – AndreH