简述

配置的话根据下面的我写的这篇来配置清楚。很容易的,遇到写的不清楚直接戳我。

配置

这里我们要求必须要安装了python还有安装了一些必须要的库(这些比上面的还简单很多,所以就简单附上文字说明了)。

画图

这里的话,为了方便使用,我做了一个模板的封装,这样以后使用的时候,直接调用类似的函数就好了。
大家使用的时候,直接复制粘贴就好了

#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");
}

Visual Studio C++ 画图【极简版】

调用的方法很简单就是直接使用下面的范式(注意先调用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");
}

Visual Studio C++ 画图【极简版】

实例二

  • 这个需要添加一个头文件
#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");
}

Visual Studio C++ 画图【极简版】

实例三

就是把上面的函数画得稍微好看点。
(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");
}

Visual Studio C++ 画图【极简版】

实例四(画圆)

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");
}

Visual Studio C++ 画图【极简版】

相关文章:

  • 2021-07-03
  • 2021-09-15
  • 2021-12-23
  • 2022-12-23
  • 2021-08-25
  • 2021-06-13
  • 2022-02-18
猜你喜欢
  • 2021-08-30
  • 2022-02-27
  • 2021-08-16
  • 2021-12-23
  • 2021-04-02
  • 2021-08-30
相关资源
相似解决方案