概述
题目描述:
平面内有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)矩形重叠所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复