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');
原理说明
填充区域需要构造闭合的多边形顶点序列:
- 先沿着
xaxis正序遍历b曲线的所有点; - 再沿着
xaxis倒序遍历min_z水平线的所有点; - 这样顶点会形成一个闭合的环,
fill函数就能正确填充曲线与水平线之间的区域。
你也可以用patch函数替代fill,参数完全一致,效果相同。
内容的提问来源于stack exchange,提问作者user28846416
相关产品推荐
相关产品推荐

