箭头matlab

以下是封装好的 MATLAB 函数,用于根据向量坐标绘制箭头图形。函数支持从原点出发的向量或自定义起点和终点的向量,并提供了灵活的绘图选项。


封装函数代码

function plotVectors(start_points, end_points, options)
    % plotVectors - 绘制向量箭头图
    %
    % 语法:
    %   plotVectors(start_points, end_points)
    %   plotVectors(start_points, end_points, options)
    %
    % 输入参数:
    %   start_points - 向量起点坐标,大小为 [n, 2] 的矩阵,每行表示一个向量的起点 (x, y)
    %   end_points   - 向量终点坐标,大小为 [n, 2] 的矩阵,每行表示一个向量的终点 (x, y)
    %   options      - 可选参数结构体,包含以下字段:
    %       * scale       : 箭头缩放因子(默认 1)
    %       * color       : 箭头颜色(默认 'b',蓝色)
    %       * lineWidth   : 箭头线宽(默认 1.5)
    %       * maxHeadSize : 箭头头部大小(默认 0.5)
    %       * gridOn      : 是否显示网格(默认 true)
    %       * axisEqual   : 是否设置坐标轴等比例(默认 true)
    %       * title       : 图形标题(默认 '向量箭头图')
    %       * xlabel      : X轴标签(默认 'X轴')
    %       * ylabel      : Y轴标签(默认 'Y轴')
    %
    % 示例:
    %   start_points = [0, 0; 2, 1; -1, 3];
    %   end_points = [3, 4; 5, 5; 0, 6];
    %   options.color = 'r';
    %   options.lineWidth = 2;
    %   plotVectors(start_points, end_points, options);

    % 默认参数
    defaultOptions.scale = 1;
    defaultOptions.color = 'b';
    defaultOptions.lineWidth = 1.5;
    defaultOptions.maxHeadSize = 0.5;
    defaultOptions.gridOn = true;
    defaultOptions.axisEqual = true;
    defaultOptions.title = '向量箭头图';
    defaultOptions.xlabel = 'X轴';
    defaultOptions.ylabel = 'Y轴';

    % 合并用户选项与默认选项
    if nargin < 3
        options = defaultOptions;
    else
        options = mergeStructs(defaultOptions, options);
    end

    % 计算向量分量
    U = end_points(:, 1) - start_points(:, 1); % X方向分量
    V = end_points(:, 2) - start_points(:, 2); % Y方向分量

    % 提取起点坐标
    X = start_points(:, 1);
    Y = start_points(:, 2);

    % 绘制箭头
    figure;
    quiver(X, Y, U, V, options.scale, ...
           'LineWidth', options.lineWidth, ...
           'Color', options.color, ...
           'MaxHeadSize', options.maxHeadSize, ...
           'AutoScale', 'off');

    % 设置图形属性
    if options.gridOn
        grid on;
    end
    if options.axisEqual
        axis equal;
    end
    title(options.title);
    xlabel(options.xlabel);
    ylabel(options.ylabel);
end

function mergedStruct = mergeStructs(defaultStruct, userStruct)
    % mergeStructs - 合并两个结构体,用户结构体优先
    mergedStruct = defaultStruct;
    fields = fieldnames(userStruct);
    for i = 1:length(fields)
        mergedStruct.(fields{i}) = userStruct.(fields{i});
    end
end

函数使用示例

示例 1:从原点出发的向量

% 定义向量终点坐标
end_points = [1, 2; 3, 4; -2, 1];

% 起点为原点
start_points = zeros(size(end_points));

% 调用函数绘制向量
plotVectors(start_points, end_points);

示例 2:自定义起点和终点的向量

% 定义向量起点和终点
start_points = [0, 0; 2, 1; -1, 3];
end_points = [3, 4; 5, 5; 0, 6];

% 设置绘图选项
options.color = 'r';
options.lineWidth = 2;
options.title = '自定义起点的向量箭头图';

% 调用函数绘制向量
plotVectors(start_points, end_points, options);

输出效果

  1. 示例 1:从原点出发的向量
    Origin-based Vectors

  2. 示例 2:自定义起点的向量
    Custom Start Points


函数特点

  1. 灵活性:支持自定义起点和终点,提供多种绘图选项。
  2. 易用性:通过 options 结构体传递参数,简化调用。
  3. 可扩展性:可根据需要扩展更多绘图选项(如颜色映射、图例等)。

注意事项

  1. 输入矩阵大小start_pointsend_points 必须为 [n, 2] 的矩阵。
  2. 箭头缩放:若箭头过小或过大,调整 options.scale 参数。
  3. 三维向量:若需绘制三维向量,可扩展函数支持 quiver3
posted @   redufa  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示