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

Matlab中如何填充变量b与zaxis最小值之间的区域?

解决MATLAB中填充曲线与水平线之间区域的问题

问题分析

你之前的代码问题出在列向量的翻转方式错误:xaxis是7301×1的列向量,fliplr()仅对行向量有效(翻转列顺序),对列向量使用时不会改变其顺序。这导致xfill实际是两个相同的xaxis拼接,无法形成闭合的填充区域,最终出现三角形和单独水平线的错误效果。

正确实现代码

以下是修正后的代码,针对列向量的xaxis和b:

% 计算zaxis的最小值
min_z = min(zaxis);

% 构造闭合区域的x坐标:正序xaxis + 倒序xaxis(列向量用flipud翻转)
xfill = [xaxis; flipud(xaxis)];

% 构造闭合区域的y坐标:正序b + 全为min_z的列向量(长度与xaxis一致)
yfill = [b; min_z * ones(size(xaxis))];

% 填充区域
fill(xfill, yfill, 'r');

如果xaxis和b是行向量(1×7301),则改用fliplr()翻转:

min_z = min(zaxis);
xfill = [xaxis, fliplr(xaxis)];
yfill = [b, min_z * ones(size(xaxis))];
fill(xfill, yfill, 'r');

原理说明

填充区域需要构造闭合的多边形顶点序列:

  1. 先沿着xaxis正序遍历b曲线的所有点;
  2. 再沿着xaxis倒序遍历min_z水平线的所有点;
  3. 这样顶点会形成一个闭合的环,fill函数就能正确填充曲线与水平线之间的区域。

你也可以用patch函数替代fill,参数完全一致,效果相同。

内容的提问来源于stack exchange,提问作者user28846416

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:23:14