Я работаю над этой задачей по программированию для колледжа, где мы должны написать программу c++
, которая вычисляет вектор магнитного поля для определенных катушек в трехмерном пространстве.
Мне удалось написать эту программу, и я думаю, что она работает довольно хорошо.
Хотелось бы добавить еще одну особенность (это моя экзаменационная работа, так что она должна быть очень хорошей!): Я не хочу выводить векторы.
Я привык звонить gnuplot
из c++
(по трубопроводу), и это то, что я обычно делаю:
- создать поток вывода, который записывает данные в
.dat
файл
- открыть трубку гнуплота
- заставляет gnuplot распечатывать все содержимое
.dat
Поскольку мои данные всегда были двухмерными, x
и y
участками, я совершенно потерян. Мой вопрос:
- Как отформатировать файл
.dat
(например, использовать ли фигурные скобки для группировки векторных компонентов?)
- Какова команда gnuplot для построения трехмерного векторного поля?
Было бы легко, если бы я мог отформатировать файл .dat
следующим образом:
# Px Py Pz Bx By Bz
1 0 2 0.7 0.5 0.25 #<= example data line
... more data ...
, когда вектор магнитного поля в точке P=(1,0,2)
равен вектору B=(0.7,0.5,0.25)
. Это было бы легко запрограммировать, реальный вопрос: это подойдет? и как мне построить это в гнуплоте. (вау, я задавал один и тот же вопрос 3 раза, наверное).
Трубопровод к гнуплоту
Хорошо, так как кто-то попросил меня описать, как я труба (не знаю, если это правильный термин) подумал о gnuplot
. Вот оно:
Сначала откройте трубу и назовите ее pipe
:
FILE *pipe = popen("gnuplot -persist 2>/dev/null", "w");
Скажите gnuplot
, что делать через трубу:
fprintf(pipe, "set term x11 enhanced \n");
fprintf(pipe, "plot x^2 ti 'x^2' with lines\n");
обратите внимание на \n
, который абсолютно необходим. Это то, что выполняет команду.
закрыть трубу:
pclose(pipe);
Необходимая библиотека называется <fstream>
Полагаю.