简述
配置的话根据下面的我写的这篇来配置清楚。很容易的,遇到写的不清楚直接戳我。
配置
这里我们要求必须要安装了python还有安装了一些必须要的库(这些比上面的还简单很多,所以就简单附上文字说明了)。
- 在网上下载好python就好了。直接在官网上下载好
- 在命令行下安装好
matplotlib
直接pip install matplotlib
就好了。 - 如果嫌慢的话,就用 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");
}
调用的方法很简单就是直接使用下面的范式(注意先调用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");
}
实例二
- 这个需要添加一个头文件
#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");
}
实例三
就是把上面的函数画得稍微好看点。
(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");
}
实例四(画圆)
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");
}