Я инженер-механик, который имеет ограниченные знания в программировании на С. Я написал код для моделирования, и хочу визуализировать результаты моделирования. На данный момент я использую Dev-C
для написания моих кодов. С помощью команд fopen
и fprintf
я создаю файл .dat
, который включает в себя результаты. Затем я открываю программу GNUPLOT
и импортирую файл .dat
для построения результатов. Это требует времени, и я должен подождать до конца моделирования. Есть ли простой способ подключения моего плоттера с Dev-C
, поэтому мой плоттер начинает строить данные во время моделирования? Любая библиотека или т.д.?
Как построить данные с помощью программы c?
Ответ 1
Поскольку вы уже знаете gnuplot, самым простым делом может быть просто вызвать gnuplot из вашей программы и передать данные на него:
FILE *gnuplot = popen("gnuplot", "w");
fprintf(gnuplot, "plot '-'\n");
for (i = 0; i < count; i++)
fprintf(gnuplot, "%g %g\n", x[i], y[i]);
fprintf(gnuplot, "e\n");
fflush(gnuplot);
Ответ 2
ОК, одно решение, когда вы пишете файл, должно было просто сделать вызов system()
при записи в файл и вызвать gnuplot.
Но это означает, что вы должны каждый раз менять имя файла, но я боюсь, если вы сделаете это, чтобы оно выглядело не так, поскольку вы каждый раз отправляете небольшие объемы данных.
http://www.gnu.org/software/libc/manual/html_node/System-Calls.html
Я никогда не использовал gnuplot, но если вы посмотрите на эту страницу (http://gnuplot-tricks.blogspot.com/), вы можете найти некоторые трюки, которые позволили бы это хорошо работайте.
Но, я думаю, если вы не собираетесь все замышлять сами, и пропустите gnuplot, тогда вам просто нужно подождать, как и вы.
Вы можете обнаружить, что интерфейс C к gnuplot может помочь вам:
Ответ 3
Я использовал PLPlot для построения графика из C и нашел его эффективным и легким. Это кросс-платформенный, с открытым исходным кодом и поддерживает богатый набор возможностей графика. Я бы порекомендовал взглянуть на примеры, чтобы начать.
Ответ 4
Я посмотрел вокруг, чтобы узнать, что сделали другие люди в отношении графика в реальном времени в gnuplot, и нашел следующее:
http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html
Там немного Perl script, который может управлять построением графика, и вы просто передаете свою информацию.
Поскольку ваши данные записываются в файл, вы можете захотеть tail -f yourdata.dat
и передать это в плоттер в режиме реального времени.
Кроме того, поскольку вы используете вызовы файлов stdio, вам необходимо регулярно обновлять (вызывая fflush
)
Очевидно, что ваша симуляция будет работать в фоновом режиме или в другой оболочке. Таким образом, вы можете выйти из графика в любое время, не прерывая симуляцию.
Надеюсь, что некоторые из вас будут полезны.