我是靠谱客的博主 醉熏大地,最近开发中收集的这篇文章主要介绍【MATLAB编程实例练习】-(11)矩形重叠,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述:
平面内有n个矩形, 第i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])。如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)。
请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。

分析:
(1)左下角点位于某个矩形内,则存在一个重叠区域,如下图红色点所示;
(2)至于左上角点,如下图绿色点位于某个矩形内的情况,可由蓝色点来代替,而蓝色点可以由红色点派生出来。
代码中最外面两层for循环枚举了以上两种情况,等价于枚举了所有重叠区域。
在这里插入图片描述

解法:

clc
clear
close all
n = input('请输入矩形个数:');
A = input('请输入矩形左下角及右上角坐标矩阵[x1;y1;x2;y2]:');
x1=A(1,:);%矩形左下角横坐标
y1=A(2,:);%矩形左下角纵坐标
x2=A(3,:);%矩形右上角横坐标
y2=A(4,:);%矩形右上角纵坐标
answer = 0;
cnt = 0;%cnt用于存放每个左下角点计算出的重叠最多的矩形个数
%最外面两层for循环枚举所有左下角点,最内层for循环枚举所有矩形
for c = 1:n
    for d = 1:n
        for k = 1:n
            if x1(c)>=x1(k) && x1(c)<x2(k) && y1(d)>=y1(k) && y1(d)<y2(k)
                %若该点位于某个矩形内
                cnt = cnt + 1;
            end
        end
        if cnt > answer
            %若该左下角点计算出的重叠矩形个数比上一个左下角点多
           answer = cnt;
        end
        cnt = 0;%cnt清零,用于存放下一个左下角点计算出的重叠矩形个数
    end
end
str = ['平面内重叠矩形最多的地方有',num2str(answer),'个矩形重叠'];
disp(str);

测试输出:

请输入矩形个数:2
请输入矩形左下角及右上角坐标矩阵[x1;y1;x2;y2][0 90;0 90;100 200;100 200]
平面内重叠矩形最多的地方有2个矩形重叠

最后

以上就是醉熏大地为你收集整理的【MATLAB编程实例练习】-(11)矩形重叠的全部内容,希望文章能够帮你解决【MATLAB编程实例练习】-(11)矩形重叠所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部