Matlab绘图——填充相交区域

将两条曲线相交的部分绘制成不同的颜色

clc;
x=linspace(-1,1,50);
y1=@(x) (1-x.^2).^(0.5);
y2=@(x) (1-(2*x).^2).^(0.5);

plot(x,y1(x),'LineWidth',3,'Color','k');
hold on

plot(x,y2(x),"LineWidth",2,'Color','k');
axis([-1.5 1.5 0 1.4]); %设置坐标轴的范围
xlabel("Wave Length",'FontSize',22);
ylabel("Intensity",'FontSize',22);
set(gca,"LineWidth",3,'xtick',[],'ytick',[]); %设置坐标轴格式、去除坐标轴刻度

patch([x,fliplr(x)],[y1(x),fliplr(y2(x))],'r'); %填充颜色

text(-0.65,1.3,"Spectral Sharpening",'FontSize',22); %在图中标注文字

patch函数解读

  • pacth(X,Y,C)函数要求,X和Y需要是指定的顶点。
  • patch([x_range, fliplr(x_range)], [y_down, fliplr(y_up)],“r”, “FaceAlpha”, 0.65);
  • 其中[x_range, fliplr(x_range)]是指下边界对应的X范围(默认从左往右),和上边界对应的X的范围,也就是反过来的x_range(逆序排列)。同理[y_down, fliplr(y_up)]是指下边界函数和上边界函数,但因patch对于顶点要求是逆序,所以上边界的y_up需要做左右对称。样式为透明度0.65的红色。

结果展示

在这里插入图片描述

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Matlab实现多边形填充的方法: 1. 使用扫描线算法进行多边形填充。该算法通过扫描线与多边形边界的交点来确定填充区域,并根据交点之间的水平间隔对像素进行填充。 ```matlab function fillPolygon(x, y) % 获取多边形的边界点 boundary = [x(:), y(:)]; % 获取多边形的最小和最大y坐标 minY = min(boundary(:, 2)); maxY = max(boundary(:, 2)); % 初始化扫描线 scanline = minY; % 初始化活动边表 activeEdges = []; % 初始化填充区域 fillRegion = zeros(maxY, 1); % 遍历每一条扫描线 while scanline <= maxY % 更新活动边表 activeEdges = updateActiveEdges(activeEdges, boundary, scanline); % 对活动边表进行排序 activeEdges = sortActiveEdges(activeEdges); % 填充当前扫描线的像素 fillRegion(scanline) = fillPixels(activeEdges); % 更新扫描线 scanline = scanline + 1; end % 显示填充结果 imshow(fillRegion); end function activeEdges = updateActiveEdges(activeEdges, boundary, scanline) % 移除不再与扫描线相交的边 activeEdges = activeEdges(activeEdges(:, 4) > scanline, :); % 添加与扫描线相交的边 for i = 1:size(boundary, 1) % 获取边的起点和终点 startPoint = boundary(i, :); endPoint = boundary(mod(i, size(boundary, 1)) + 1, :); % 判断边是否与扫描线相交 if startPoint(2) < scanline && endPoint(2) >= scanline || endPoint(2) < scanline && startPoint(2) >= scanline % 计算边与扫描线的交点 intersectionX = startPoint(1) + (scanline - startPoint(2)) * (endPoint(1) - startPoint(1)) / (endPoint(2) - startPoint(2)); % 计算边的斜率 slope = (endPoint(1) - startPoint(1)) / (endPoint(2) - startPoint(2)); % 添加边到活动边表 activeEdges = [activeEdges; startPoint(2), intersectionX, slope, endPoint(2)]; end end end function sortedEdges = sortActiveEdges(activeEdges) % 按照交点的x坐标对活动边表进行排序 [~, sortIndex] = sort(activeEdges(:, 2)); sortedEdges = activeEdges(sortIndex, :); end function fillRegion = fillPixels(activeEdges) % 初始化填充区域 fillRegion = zeros(1, size(activeEdges, 1)); % 遍历每一对相邻的边 for i = 1:2:size(activeEdges, 1)-1 % 获取边的起点和终点 startPoint = activeEdges(i, :); endPoint = activeEdges(i+1, :); % 填充之间的像素 fillRegion(startPoint(2):endPoint(2)) = 1; end end ``` 2. 使用Matlab的`fill`函数进行多边形填充。该函数可以直接填充多边形区域。 ```matlab function fillPolygon(x, y) % 获取多边形的边界点 boundary = [x(:), y(:)]; % 填充多边形区域 fill(boundary(:, 1), boundary(:, 2), 'r'); end ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值