git clone https://github.com/PhyX-Meow/OurPlot.cpp
cd ./OurPlot.cpp
bash build.sh
以上命令会在 OurPlot.cpp/lib/
目录下生成 libplot.so
注:至少需要 c++11 标准支持
编译运行:假设 main.cpp
位于项目根目录下
g++ -Wall -O2 main.cpp -L./lib -lplot -o main.out
./main.out
Working In Progress
- 头文件
#include "include/our_plot.h"
- 初始化画布
canvas_2d c = canvas_2d(width, height, {x_min, x_max}, {y_min, y_max});
// Or equivalently
canvas_2d c(width, height, {x_min, x_max}, {y_min, y_max});
width
和 height
为正整数,分别指定画布的宽高,单位为像素
x_min, x_max, y_min, y_max
为浮点数,指定画布中包含的坐标范围
- 直线
line L({ini_x, ini_y}, {end_x, end_y}, color, style);
ini_x, ini_y, end_x, end_y
为起始点与终止点的横纵坐标
端点也可以用极坐标方式指定
line L(polar(r1,θ1), polar(r2, θ2), color, style);
color
为 pix
类型的变量,支持如下构造方式
pix(red, green, blue); // red, green, blue integer in [0,255]
pix(0xRRGGBB); // standard hex color, R G B from 0 to F
RGB_f(red, green, blue); // red, green, blue real number in [0,1.0]
HSV(hue,s,v); // hsv color, hue integer in [0,360], s and v real number in [0,1.0]
头文件中包含如下预定义颜色变量
const pix White(0xFFFFFF);
const pix Red(0xFF0000);
const pix Green(0x00FF00);
const pix Blue(0x0000FF);
const pix Cyan(0x00FFFFF);
const pix Purple(0xFF00FF);
const pix Yellow(0xFFFF00);
const pix Black(0x000000);
style
控制线条粗细,取值为 thin, medium, thick
- 一元函数
func_1var fun(function, color, style, precis = 0.1, axe_type = X);
function
为 double -> double
的函数
precis
为取样精度,数值越小精度越高,默认值为 0.1
axe_type
取值为 X
或 Y
声明自变量是 x 或 y,默认值为 X
color
与 style
含义同直线
- 极坐标函数
func_polar pol(function, {θ_min, θ_max}, color, style, precis = 0.1);
function
为 double -> double
的函数
θ_min, θ_max
为 θ 的绘制范围
其余参数含义同一元函数
- 参数曲线
func_para par(function, {t_min, t_max}, color, style precis = 0.1);
function
为 double -> point
的函数,返回值类型为 point(double x, double y)
代表平面中一个点
t_min, t_max
为参数 t 绘制范围
其余参数含义同一元函数
- 将曲线绘制到坐标轴上
支持类似 cout
的语法
c << fun << pol << par;
可以直接绘制匿名曲线对象
c << line({-1.9, -1.9}, {.8, 1.0}, 0x114514)
<< func_para([](double t) { return polar(1.0, t); }, {0, 2 * pi}, Black, thin);
- 绘制坐标轴
c.draw_axes();
- 保存图片
c.save_as("path/to/file");
save_as
可以接受 string
或者 const char[]
做参数,输出格式为 24-bit bmp
- 例:绘制一朵花
#include "include/our_plot.h"
int main() {
canvas_2d c(1000, 1000, {-1.5, 1.5}, {-1.5, 1.5});
c.draw_axes();
c << func_polar([](double t) { return sin(1.3 * t); }, {0, 20 * pi}, Red, thin, 0.01);
c.save_as("flower.bmp");
return 0;
}
因为 ddl 等原因,三维绘图功能尚不完善
- 初始化画布
toy_3d c(width, height, scale);
scale
表示放大倍率,推荐设置 width = 800, height = 600, scale = 1.0
,或这个参数比例的倍数
- 函数图像曲面
surface sigma(function, color_function, precis = 0.1, mesh = 5);
function
是 z 关于 (x, y) 的函数,接受两个 double
参数,返回值为 double
类型
color_function
指定如何对图像染色,接受 point_3d
为参数,返回值为 pix
类型
其中 point_3d
类型的变量拥有三个成员 x, y, z
为它的三个坐标
precis
为取样精度,数值越小精度越高
mesh
为整数,指定每多少个取样点画一条网格线
- 参数曲线
Working In Progress
- 参数曲面
Working In Progress
- 例:绘制墨西哥草帽
#include "include/our_plot.h"
double hat(double x, double y) {
double r = std::sqrt(x * x + y * y);
if (r < 1e-5)
return 1.0;
return std::sin(r) / r;
}
int main() {
toy_3d c(1600, 1200, 2.0);
c << surface(
hat,
[](point_3d p) { return HSV((1.0 - p.z) * 240.0, 1.0, 1.0); },
0.1,
5
);
c.save_as("c.bmp");
return 0;
}