Спрашивающий, возможно, уже получил ответ. Однако этот ответ может быть полезен для таких людей, как я, которые перешли с MATLAB (или некоторых других хорошо разработанных инструментов научного программирования) на C ++ (примитивный язык программирования).
Построение графиков - это немного сложная задача в C ++, так как в любой IDE C ++ нет библиотеки для печати графиков по умолчанию. Тем не менее, есть много библиотек, доступных онлайн для возможности построения графиков в C ++. Некоторые инструменты построения графиков, такие как Gnuplot, PPlot и т. Д., Уже упоминались в приведенных выше ответах, однако я перечислил один за другим соответствующие примеры:
Koolplot простой, элегантный и простой в использовании инструмент для 2D-черчения и может быть недостаточно для вашего требования. Пример выдержки из веб-сайта приведен ниже, вы можете найти больше примеров и процесс связывания его с C ++ IDE здесь .
#include "koolplot.h"
int main()
{
plotdata x(-6.0, 6.0);
plotdata y = sin(x) + x/5;
plot(x, y);
return 0;
}
GNUPlot , очень надежный инструмент с открытым исходным кодом для построения графиков, с помощью интерфейса Интерфейс Gnuplot-iostream , вызывать команды gnuplot из C ++ очень легко процесс. Если кто-то уже имеет опыт построения графиков в gnuplot и должен использовать C ++ для своего программирования, тогда этот интерфейс очень полезен. или если вы хотите создать свой собственный интерфейс, эта информация, предоставленная в здесь , будет очень полезна. Процесс связывания этого интерфейса очень прост, просто установите gnuplot в вашей системе, а затем свяжите каталог include и каталог lib gnuplot с C ++ IDE, и тогда вы готовы к работе. Примеры того, как использовать Gnuplot из C ++ с использованием интерфейса gnuplot-iostream, приведены здесь , выдержка из примера примера приведена ниже.
#include <vector>
#include <cmath>
#include <boost/tuple/tuple.hpp>
#include "gnuplot-iostream.h"
int main() {
Gnuplot gp;
std::vector<boost::tuple<double, double, double, double> > pts_A;
std::vector<double> pts_B_x;
std::vector<double> pts_B_y;
std::vector<double> pts_B_dx;
std::vector<double> pts_B_dy;
for(double alpha=0; alpha<1; alpha+=1.0/24.0) {
double theta = alpha*2.0*3.14159;
pts_A.push_back(boost::make_tuple(
cos(theta),
sin(theta),
-cos(theta)*0.1,
-sin(theta)*0.1
));
pts_B_x .push_back( cos(theta)*0.8);
pts_B_y .push_back( sin(theta)*0.8);
pts_B_dx.push_back( sin(theta)*0.1);
pts_B_dy.push_back(-cos(theta)*0.1);
}
gp << "set xrange [-2:2]\nset yrange [-2:2]\n";
gp << "plot '-' with vectors title 'pts_A', '-' with vectors title 'pts_B'\n";
gp.send1d(pts_A);
gp.send1d(boost::make_tuple(pts_B_x, pts_B_y, pts_B_dx, pts_B_dy));
} // very simple tool right???
MATLAB (Да, я не шучу, MATLAB можно вызвать из C ++) Если вы знакомы с MATLAB, вы можете получить те же функциональные возможности в C ++, вызывая функции / наборы инструментов из MATLAB и наоборот. Поскольку MATLAB является коммерческим программным обеспечением, сначала вам нужно приобрести лицензию (это очень дорого). Если у вас установлено программное обеспечение MATLAB, затем используйте файл engine.h
и свяжите необходимые файлы библиотеки MATLAB с C ++ IDE, тогда процесс будет простым. Подробный пошаговый процесс связывания Matlab с Visual Studio C ++ предоставляется здесь и здесь . Пример кода приведен здесь, выдержка из примера приведена ниже ( источник )
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
#define BUFSIZE 256
int main()
{
Engine *ep;
mxArray *T = NULL, *result = NULL;
char buffer[BUFSIZE+1];
double time[10] = { 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 };
if (!(ep = engOpen(""))) {
fprintf(stderr, "\nCan't start MATLAB engine\n");
return EXIT_FAILURE;
}
T = mxCreateDoubleMatrix(1, 10, mxREAL);
memcpy((void *)mxGetPr(T), (void *)time, sizeof(time));
engPutVariable(ep, "T", T);
engEvalString(ep, "D = .5.*(-9.8).*T.^2;");
engEvalString(ep, "plot(T,D);");
engEvalString(ep, "title('Position vs. Time for a falling object');");
engEvalString(ep, "xlabel('Time (seconds)');");
engEvalString(ep, "ylabel('Position (meters)');");
printf("Hit return to continue\n\n");
fgetc(stdin);
printf("Done for Part I.\n");
mxDestroyArray(T);
engEvalString(ep, "close;");
buffer[BUFSIZE] = '\0';
engOutputBuffer(ep, buffer, BUFSIZE);
while (result == NULL) {
char str[BUFSIZE+1];
printf("Enter a MATLAB command to evaluate. This command should\n");
printf("create a variable X. This program will then determine\n");
printf("what kind of variable you created.\n");
printf("For example: X = 1:5\n");
printf(">> ");
fgets(str, BUFSIZE, stdin);
engEvalString(ep, str);
printf("%s", buffer);
printf("\nRetrieving X...\n");
if ((result = engGetVariable(ep,"X")) == NULL)
printf("Oops! You didn't create a variable X.\n\n");
else {
printf("X is class %s\t\n", mxGetClassName(result));
}
}
printf("Done!\n");
mxDestroyArray(result);
engClose(ep);
return EXIT_SUCCESS;
}
Python , людям нравится спрашивать (кто знаком с инструментом matplotlib в Python). Очень элегантный интерфейс доступен для вызова Python из C ++. простой пример может выглядеть следующим образом ( source ), а matlabplotcpp.h
доступно здесь .
#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
int main() {
plt::plot({1,3,2,4});
plt::show();
}
Надеюсь, эта информация может быть полезна ...