You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:57:38