如何在C++17中使用sciplot的drawWithVecs绘制矢量场?
在C++17中用sciplot的drawWithVecs绘制矢量场
drawWithVecs正是sciplot中用于绘制矢量场的核心函数,和你参考的matplotlib quiver功能完全匹配,完全适用于你的场景。以下是具体用法说明和示例:
核心用法要点
- 准备四类数据:矢量起点的
x坐标数组、y坐标数组,以及对应每个起点的x方向分量u、y方向分量v(均为std::vector<double>或其他sciplot兼容容器) - 基础调用形式:
plot.drawWithVecs(x, y, u, v) - 可通过链式调用添加样式配置:比如矢量颜色、线宽、箭头长度、缩放比例等
完整示例代码
模拟你参考的示例场景,生成网格点并绘制环流矢量场:
#include <sciplot/sciplot.hpp> #include <vector> #include <cmath> int main() { // 生成网格点(对应matplotlib的meshgrid) std::vector<double> x; std::vector<double> y; for (double i = -2; i <= 2; i += 0.5) { for (double j = -2; j <= 2; j += 0.5) { x.push_back(i); y.push_back(j); } } // 计算矢量分量:u = y,v = -x(生成逆时针环流场) std::vector<double> u; std::vector<double> v; for (size_t k = 0; k < x.size(); ++k) { u.push_back(y[k]); v.push_back(-x[k]); } // 初始化绘图对象 sciplot::Plot plot; plot.title("矢量场演示") .xlabel("X轴") .ylabel("Y轴"); // 绘制矢量场并配置样式 plot.drawWithVecs(x, y, u, v) .vecsColor("darkblue") .vecsLineWidth(1.2) .vecsHeadLength(0.25) .vecsScale(0.8); // 调整矢量整体缩放比例 // 保存为SVG或显示窗口 plot.save("vector_field.svg"); // plot.show(); return 0; }
额外注意事项
- 确保使用sciplot 0.2.0及以上版本,旧版本可能没有
drawWithVecs函数 - 若矢量显示过于密集/稀疏,可调整网格点的步长(示例中是0.5)
vecsScale参数用于统一缩放所有矢量的长度,避免矢量过长覆盖网格或过短不易分辨
内容的提问来源于stack exchange,提问作者Ted Black
相关产品推荐
相关产品推荐

