Visual Studio C++ 画图【极简版】 比眉伴天荒 2022-04-03 05:54 267阅读 0赞 ## 简述 ## 配置的话根据下面的我写的这篇来配置清楚。很容易的,遇到写的不清楚直接戳我。 ### 配置 ### * [VS C++调用python进行画图matplotlib][VS C_python_matplotlib] ### 文章目录 ### * * 简述 * * 配置 * 画图 * 使用实例 * * 实例一 * 实例二 * 实例三 * 实例四(画圆) 这里我们要求必须要安装了python还有安装了一些必须要的库(这些比上面的还简单很多,所以就简单附上文字说明了)。 * 在网上下载好python就好了。**直接在官网上下载好** * 在命令行下安装好`matplotlib` 直接`pip install matplotlib` 就好了。 * 如果嫌慢的话,就用 [pip安装库速度较慢–常用的几个国内镜像][pip] 的解决方式 ## 画图 ## 这里的话,为了方便使用,我做了一个模板的封装,这样以后使用的时候,直接调用类似的函数就好了。 **大家使用的时候,直接复制粘贴就好了** #include<Python.h> #include<string> using namespace std; #include <iostream> template<class T> string arr_to_string_list(T*arr, int N) { string s = "["; for (int i = 0; i < N; ++i) { s += to_string(arr[i]); if (i != N - 1) s += ","; } s += "]"; return s; } template<class T, class V=int> void plot(T*x, int N1, V*y=NULL, bool equal=false) { PyRun_SimpleString("import matplotlib.pyplot as plt"); if (equal) { PyRun_SimpleString("plt.axis(\"equal\")"); } string cmd = "plt.plot("; string s1 = arr_to_string_list(x, N1); if (y != NULL) { string s2 = arr_to_string_list(y, N1); cmd += (s1 + "," + s2 + ")"); PyRun_SimpleString(cmd.c_str()); } else { cmd += (s1 + ")"); PyRun_SimpleString(cmd.c_str()); } PyRun_SimpleString("plt.show()"); } void pythonInitial() { Py_Initialize(); /*初始化python解释器,告诉编译器要用的python编译器*/ string path = "."; string chdir_cmd = string("sys.path.append(\"") + path + "\")"; const char* cstr_cmd = chdir_cmd.c_str(); PyRun_SimpleString("import sys"); PyRun_SimpleString(cstr_cmd); } **主函数部分:** void main() { double a[] = { 1.2, 2.0, 3, 4, 5, 6, 3, 2, 3, 2, 31, 2, 1, 4 }; pythonInitial(); plot(a, 14); // 14是数组长度 Py_Finalize(); /*结束python解释器,释放资源*/ system("pause"); } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70] 调用的方法很简单就是**直接使用下面的范式(注意先调用python的初始化和python的释放)** plot(数组,长度); ## 使用实例 ## 其实就是修改下main函数部分,来看下结果。 ### 实例一 ### void main() { const int N = 14; int b[N] = { }; for (int i = 0; i < N; ++i) { b[i] = 2 * i - 1; } double a[] = { 1.2, 2.0, 3, 4, 5, 6, 3, 2, 3, 2, 31, 2, 1, 4 }; pythonInitial(); plot(b, N, a); Py_Finalize(); /*结束python解释器,释放资源*/ system("pause"); } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 1] ### 实例二 ### * 这个需要添加一个头文件 #include <cmath> void main() { const int N = 14; int b[N] = { }; for (int i = 0; i < N; ++i) { b[i] = 2 * i - 1; } double a[N] = { }; for (int i = 0; i < N; ++i) { a[i] = sin(b[i]); } pythonInitial(); plot(b, N, a); Py_Finalize(); /*结束python解释器,释放资源*/ system("pause"); } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 2] ### 实例三 ### 就是把上面的函数画得稍微好看点。 (c++画sin函数) * 这里的话,用到了pi所以,换一下头文件,把刚刚的 #include <cmath> 替换成(顺序不能颠倒)(**不然就是定义一下PI**) #define _USE_MATH_DEFINES #include <math.h> void main() { const int N = 1000; double b[N] = { }; for (int i = 0; i < N; ++i) { b[i] = 2*M_PI * i / N; } double a[N] = { }; for (int i = 0; i < N; ++i) { a[i] = sin(b[i]); } pythonInitial(); plot(b, N, a); Py_Finalize(); /*结束python解释器,释放资源*/ system("pause"); } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 3] ### 实例四(画圆) ### void main() { const int N = 1000; double r = 1.0; double point_x = 0.0, point_y = 0.0; double b[N] = { }; for (int i = 0; i < N; ++i) { b[i] = 2*M_PI * i / N; } double x[N] = { }; for (int i = 0; i < N; ++i) { x[i] = point_x + r * cos(b[i]); } double y[N] = { }; for (int i = 0; i < N; ++i) { y[i] = point_y + r * sin(b[i]); } pythonInitial(); plot(x, N, y, true); Py_Finalize(); /*结束python解释器,释放资源*/ system("pause"); } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 4] [VS C_python_matplotlib]: https://blog.csdn.net/a19990412/article/details/85079329 [pip]: https://blog.csdn.net/a19990412/article/details/82926079 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70]: /images/20220403/c117210910bd4be1a37d60c971bb47fd.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 1]: /images/20220403/ded394efc4d44d84b3f4babe23e3c87d.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 2]: /images/20220403/49788992b2f44f708e5ae4c9cd517571.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 3]: /images/20220403/db2a17fe16bc4029b46e0bfab171fc23.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ExOTk5MDQxMg_size_16_color_FFFFFF_t_70 4]: /images/20220403/e3f6951637334eedbbcfc507179e6445.png
还没有评论,来说两句吧...