最新2016区域覆盖问题设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
一、问题重述
二、问题分析
三、模型假设
四、定义与符号说明
五、模型的建立与求解
模型I(正方形模型)
模型II(正六边形模型)
推广:以圆求解模型
六、对模型的评价
七、参考文献
八、附录
一﹑问题重述
给定一个m*n的矩形区域,如果半径为r的圆对其进行完全覆盖,要求相邻两个圆相交的公共面积不小于一个圆面积的k%,使得完全覆盖整个图形时所用圆的个数最少,求解覆盖模型。

二﹑问题分析
对于问题的分析,要求我们要完全相同的最少的圆完全覆盖矩形区域,这样减少圆的个数,让其求解该题的思路更加清晰。

该问题属于数学中的几何问题,通常采用几何作图的方法再结合几何定理尝试解决该问题的模型,再通过具体数据对模型进行验证优化,筛选出最
优模型。

对于问题所要求的结果进行分析:题目要求使用尽可能少的完全相同的圆完全覆盖矩形区域,要使其完全覆盖则圆与圆之间必有重叠部分。

基于上述要求,本题就从减少重叠部分着手。

又因为此题给出了一组数据,利用数据可使得问题简化。

从实际结合理论要求,我们采用预测、推理、证明的方法。

首先,正方形是一个特殊的四边形,用圆进行覆盖,把两个特殊的图形联系起来。

很自然的想到利用正方形进行覆盖,而用正方形的外接圆再覆盖矩形区域。

再从具体的数据入手计算,考虑完全覆盖的最优个数问题。

那么其他的正多边形是否可以同样利用外接圆的思想对矩形区域进行完全覆盖计算?通过证明可以知道正三角形、正方形、正六边形可以满足要求(见附录1.2)。

利用几何定理自然地可以推广到正六边形。

这就是本文的基本思路。

综合以上原因,首先,我们建立了一个以正方形为单位对矩形区域进行覆盖的模型I,然后,建立了一个以正六边形为单位的对矩形区域进行覆盖的模型II。

先对两个模型进行预测,再利用所给的实际数据进行计算,对结果进行了分析。

最后,得出较优模型。

三、模型假设
⑴.覆盖区域为一个矩形;
⑵.每一个圆都是半径相同的等圆;
⑶.相邻两个圆相交的公共面积不小于一个圆面积的k%;
⑷.如果一个圆只有部分在图形中,也按一个计算;
⑸.用相同的正多边形完全覆盖矩形,相邻正多边形间无缝隙。

四、定义与符号说明
模型的建立与求解
一以正方形为单位的对矩形区域进行覆盖的模型I
在解决本问题的过程中,我们需要考虑的问题主要有以下几点:一、怎样用圆覆盖矩形区域,且使得所用圆的个数最少?二、相邻两个圆重合面积的怎样计算?由于题中最后给出了一边长为1000的正方形,半径为100的圆去填充正方形,故我们可以通过该特殊例子的求解方案建立模型,从而推广到一般的矩形区域覆盖问题。

针对m=n=1000.r=100,的覆盖问题的求解
解题思路如下:
建立以正方形为基础,通过以正方形外接圆为单位去覆盖例题中所给的正方形,然后根据例题作进一步的推广到矩形。

如下图所示
小正方形的对角线ab为200,则可以通过计算得到小正方形的边长
为100242.141≈ (注2≈1.4142)小正方形的外接圆半径r=100,用小正方形外接圆去覆盖小正方形。

当正方形边长为1000时,可以将此正方形分解为对角线长为200的若干小正方形,没有被分为小正方形部分为小矩形,然后用小正方形的外接圆去覆盖小正方形,剩余的小矩形补为对角线长为200的小正方形,然后用小正方形外接圆去覆盖小正方形。

通过编程得到(附录3)如下图
共要8*8=64个小方形
此时相邻两正方形外接圆重合面积为S1 如下图所示
S1=(2
1412
2⨯-⨯r r π)2⨯ S=r 2π
K%=
S
S 1
=18.15%
以上是对边长为1000的正方形的计算,通过该计算思想可以推广到矩形区域覆盖问题上
已知矩形的长为m ,宽为 n ,用半径为 r 的圆去覆盖矩形,可把矩形分成若干个对角线长为2r 的小正方形,没有被分为小正方形部分为小矩形,然后用小正方形的外接圆去覆盖小正方形,剩余剩余的小矩形补为对角线长为200的小正方形,然后用小正方形外接圆去覆盖小正方形。

建立如下公式
A2=⎪⎪⎩⎪⎪⎨
⎧>⎥⎦⎤⎢⎣⎡-+⎥⎦
⎤⎢⎣⎡=⎥⎦⎤
⎢⎣⎡-0
22120222r m r m r m r m r m r m
B2=⎪⎪⎩⎪⎪⎨
⎧>⎥⎦⎤⎢⎣⎡-+⎥⎦
⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡-0
22120222r n r n n r n r n r n r n S=A2*B2=
⎪⎪⎪⎪
⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨
⎧>⎪⎪⎭⎫ ⎝⎛⎥⎦⎤⎢⎣⎡->⎪⎪⎭⎫ ⎝⎛⎥⎦⎤⎢⎣⎡-⎪⎪⎭
⎫ ⎝⎛+⎥⎦⎤⎢⎣⎡⨯⎪⎪⎭⎫ ⎝⎛+⎥⎦⎤⎢⎣⎡>⎪⎪⎭⎫ ⎝⎛⎥⎦⎤⎢⎣⎡-=⎪⎪⎭⎫ ⎝⎛⎥⎦⎤⎢⎣⎡-⎪
⎪⎭⎫ ⎝⎛+⎥⎦⎤⎢⎣⎡⨯>⎪⎪⎭⎫ ⎝⎛⎥⎦⎤⎢⎣⎡-=⎪⎪⎭⎫ ⎝⎛⎥⎦⎤⎢⎣⎡-⎪⎪⎭⎫ ⎝⎛+⎥⎦⎤⎢⎣⎡⨯=⎪
⎪⎭⎫
⎝⎛⎥⎦⎤⎢⎣⎡-=⎪⎪⎭⎫ ⎝⎛⎥⎦⎤⎢⎣⎡-⨯02202212120220221220220221220220222
2r m r m r n r n r m r n r m r m r n r n r m r n r n r n r m r m r n r m r n r n r m r m r n r m 且且且且 根据以上公式我们可以通过编程计算出要用多少个圆去覆盖矩形,该求解该模型的思路和求解上一特例的思路一样,即相邻两正方形外接圆重合面积与上例相同 k%=18.15%
下用正六边形求解矩形区域覆盖问题
二以正六边形形为单位的对矩形区域进行覆盖的模型II
(1)模型的知识准备
在满足完全覆盖矩形区域的条件下,使得所用圆个数最少,就要充分利用每个圆覆盖的区域范围,尽可能减小重叠部分。

为便于讨论,考虑三个圆相交的情况,如图1(a)中以o1,o2,o3为圆心的圆,我们的目标是要使得他们之间相互重合部分面积达到最小,又从图1(b)可以看出三圆重叠的面积比1(a)中更小。

图1(a)图1(b)
定理1:如果三个半径相同的圆两两相交且覆盖面积最大,则三圆必交于一点。

定理2:如果三圆两两相交于一点并且三个圆心围成等边三角形,则
其覆盖面积最大。

图2
证明:由定理1如图2设O 为三个圆的交点,每个圆圆心到交点的距离均为r 。

∴三圆心必然在以O 为圆心r 为半径的圆周上。

要使得三圆覆盖面积最大,即求阴影部分S S S 321++最小。

又在同一圆中,必有π2321=∠+∠+∠A C C B B A O O O ;
∴扇形A C C B B A O O O 321扇形扇形++=
r
2
π;
设以上三个扇形总面积为S ,则S=r 2
π;
∴S S S 321++=S-六边形O O O C B A 321;
∴要使阴影部分面积最小,就要让六边形面积最大,也就是三角形面
积最大。

要使得三角形面积最大,又因为O O O 321共圆,所以三角形为等边三角形时面积最大。

又从定理2可知当覆盖的面积最大时三圆心构成了等边三角形,
图 3
如图3所示F E O 10∠=3
π,由一个圆与六个相同半径的圆相交构成了一个正六边形。

如此相互覆盖就形成了以正六边形为单位的覆盖模型。

由程序(见附录4)可得如下图形:
从图可知用正六边形覆盖正方形区域共需45个。

此时相邻两正六边形外接圆重合面积为S1 如下图所示
⎪⎪⎭
⎫ ⎝⎛-*=r r s 22143612π r s 2π= s
k s 1
%=
=5.8%
通过该思路可以推广到一般情况,如下:
(2) 模型的建立
=A 1⎪⎪⎪⎩⎪⎪
⎪⎨⎧>⎥⎦⎤⎢⎣⎡-+⎥

⎤⎢⎣⎡≤⎥⎦⎤⎢⎣⎡-+⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡-3133..................................................................23*23133...................................................................13*20.33...............................................................................32r m r m r m r m r m r m r m r m r m
=
B
1
⎪⎪⎩⎪⎪⎨
⎧≤⎥⎦
⎤⎢⎣⎡-+⎥⎦
⎤⎢
⎣⎡=⎥⎦
⎤⎢⎣
⎡-2133..............................................................13033.......................................................................3r n r n r n r n r n
r n
C=⎪⎪⎪⎪⎩
⎪⎪⎪
⎪⎨⎧⎪⎪⎩⎪⎪⎨⎧-+
≤⎥⎦⎤⎢⎣⎡-<为奇数为偶数A 1111
1111 (21)
..................................................
2*2
1330........................................................*A A A B A B A r n r n
六、对模型的评价与推广
一、模型的优缺点 1优点:
(1):本模型从正多边形引入,然后以正多边为基础,通过用正多边形的外接圆去覆盖矩形,这样更清晰明了的点出该问题的求解方案。

(2):本模型采用正三角形、正方形、正六边形的外接圆,最后经过计算、筛选建立出以正方形、正六边形为基础的模型I 、II ,并用MATLAB 软件编程,计算出最优结果,使得该问题求解简单、明了。

(3):模型中采用大量的图形,更加直观、清晰展现出求解该问题的过程,更具有说服性。

缺点
(1):建立的模型太过理想化,模型I 、II 都只是用单一的正多边形外接圆去覆盖矩形,没有采用多种正多边形的组合去覆盖矩形,假如用正三角形和正方形,或者正六边形与正三角形去覆盖矩形,然后用两个图形的外接圆去覆盖矩形区域,会不会减少圆使用的个数呢?这是一个新的想法,编程可能更复杂,这里就没有考虑。

二、模型的推广
该本模型针提出了如何用最少的圆去覆盖矩形区域,并且两个圆的相交部分的面积不小于K%,针对这一问题我们建立了最优化模型,这样减少了圆的使用个数,更加节省了资源。

在以后的地砖铺设、墙面粉饰等装修领域均可以使用。

可以高效节省资源。

八参考文献
(1) 赫孝良 戴永红 周义仓 .数学建模竞赛赛题简析与论文点评.
西安.西安交通大学出版社.2002
(2) 赵静 但琦,数学建模与数学实验,高等教育额出版社.2008
(3) 马俊华.数学通报.中学数学月刊.2006
附录
附录1
证明只有正三角形、正方形、正六边形可以覆盖矩形
正多边形的定义 各边相等,各角也相等的多边形叫做正多边形 若要用同一种多正多形镶嵌平面图形,则应该密铺(图形与图形之间没有空隙)正多边形的一个内角能被360整除就可以
K=()n
n 2180-⨯ (k 表示正多边形内角度数,n 表示正多边形边数) k
360∈N 通过计算得n 为3、4、6。

所以只有正三角形、正方形、正六边形可以进行平面镶嵌。

即选择以上三种图形覆盖矩形.
附录2
function count=t(m,n,r) %M*N的矩阵用半径为r的圆覆盖,相邻相交圆相交得的面积不小于圆面积的k%求圆的个数
m=input('输入矩阵的长度m=');
n=input('输入矩阵的宽度n=');
r=input('输入圆的半径r=');
k=input('输入相邻相交圆的相交面积与圆面积的百分比 k=');
k=k/100;
disp(['m=',num2str(m),' n=',num2str(n),' r=',num2str(r),' k=',num2str(k)])
disp('');
format long;
%当用正三角形覆盖时求K的值
k1=(1/2*r^2*2*pi/3-1/2*r^2*1/2*sqrt(3))*2/(pi*r^2);
%当用正方形覆盖时求K的值
k2=(1/2*r^2*pi/2-1/2*r^2)*2/(pi*r^2);
%当用正六边形覆盖时求K的值
k3=(1/2*r^2*pi/3-1/2*r*sqrt(3)*r/2)*2/(pi*r^2);
disp(['三角形覆盖k1=',num2str(k1),' 正方形覆盖
k2=',num2str(k2),' 正六边形覆盖k3=',num2str(k3)]);
z=sqrt(m^2+n^2)/2;
if r>=z
count=1;
disp(count);break;
else
if abs(k-k2)>abs(k-k3)
disp('此时用正六边形覆盖矩形。

');
v1=m/3/r-floor(m/3/r);
A1=2*m/3/r; %A1为矩形长所包含的正六边形个数
end
if v1<1/3|v1==1/3
A1=floor(2*m/3/r)+1;
end
if v1>1/3
A1=floor(2*m/3/r)+1;
end
v2=n/sqrt(3)/r-floor(n/sqrt(3)/r);
if v2==0
B1=n/sqrt(3)/r; %B1为矩形宽所包含的正六边形个数
else
B1=floor(n/sqrt(3)/r)+1;
end
if v2>0&v2<=1/2
count=A1*B1;
elseif mod(A1,2)==0
count=A1*B1+A1/2;
else
count=A1*B1+(A1-1)/2;
end
disp(['覆盖所用的正六边形个数count=',num2str(count)]);
%%%%%%%%%%%%%作图
x(1)=r/2;y(1)=r*sqrt(3)/2;
s2=r*sqrt(3);
for l=2:A1
x(l)=x(l-1)+s1;
end
for j=2:B1+1
y(j)=y(1)+(j-1)*s2;
end
rectangle('Position',[0,0,m,n]) %给定起点[0,0] 矩形宽w高h
hold on
%%%%%%%%%%%%%%%%%%%%%%%画基数列的圆
for k=1:2:A1
for p=1:B1
sita=0:0.05:2*pi;
plot(x(k),y(p));
plot(x(k)+r*cos(sita),y(p)+r*sin(sita));
axis equal
end
end
%%%%%%%%%%%六边形
for k=1:2:A1
for p=1:B1
sita=0:pi/3:2*pi;
plot(x(k)+r*cos(sita),y(p)+r*sin(sita),'r');
axis equal
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%画偶数列的圆
for k=2:2:A1
for p=1:B1+1
sita=0:0.05:2*pi;
plot(x(k),y(p)+(s2/2));
plot(x(k)+r*cos(sita),y(p)-s2/2+r*sin(sita));
axis equal
end
end
%%%%%%%%%%%六边形
for k=2:2:A1
for p=1:B1+1
sita=0:pi/3:2*pi;
plot(x(k)+r*cos(sita),y(p)-s2/2+r*sin(sita),'r');
axis equal
end
end
hold off %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%
else
disp('此时用正方形覆盖矩形。

') ;
v1=m/sqrt(2)/r-floor(m/sqrt(2)/r);
if v1==0
A2=m/sqrt(2)/r; %A2为矩形长所包含的正方形个数 elseif v1<1
A2=floor(m/sqrt(2)/r)+1;
end
v2=n/sqrt(2)/r-floor(n/sqrt(2)/r);
if v2==0
B2=n/sqrt(2)/r; %B2为矩形宽所包含的正方形个数 elseif v1<1
B2=floor(n/sqrt(2)/r)+1;
end
count=A2*B2;
disp(['覆盖所用的正方形个数count=',num2str(count)]); %%%%%%%%%%%%%%%%%作图
rectangle('Position',[0,0,m,n]) %给定起点[0,0] 矩形宽m高n
hold on
x(1)=r/2*sqrt(2);y(1)=r/2*sqrt(2);
for i=2:A2
x(i)=x(1)+(i-1)*r*sqrt(2);
end
for j=2:B2
y(j)=y(1)+(j-1)*r*sqrt(2);
end
for k=1:A2
for p=1:B2
sita=0:0.05:2*pi;
hold on
plot(x(k),y(p));
hold on
plot(x(k)+r*cos(sita),y(p)+r*sin(sita),'r');
axis equal
hold on
end
end
end
end
附录3
function f=phg(m,n,r)
m=1000;n=1000;r=100;
rectangle('Position',[0,0,m,n]) %给定起点[0,0] 矩形宽w高h
hold on
x(1)=r/2*sqrt(2);y(1)=r/2*sqrt(2);
for i=2:ceil(5*sqrt(2))
x(i)=x(1)+(i-1)*r*sqrt(2);
end
for j=2:ceil(5*sqrt(2))
y(j)=y(1)+(j-1)*r*sqrt(2);
end
for k=1:ceil(5*sqrt(2))
for p=1:ceil(5*sqrt(2))
sita=0:0.05:2*pi;
hold on
plot(x(p),y(k));
hold on
plot(x(p)+r*cos(sita),y(k)+r*sin(sita)); axis equal
hold on
end
end
附录4
function f=phg1(m,n,r)
hold off
m=1000;n=1000;r=100;
x(1)=r/2;y(1)=r*sqrt(3)/2;
s1=3*r/2;
s2=r*sqrt(3);
for l=2:m
x(l)=x(l-1)+s1;
end
for j=2:n+1
y(j)=y(1)+(j-1)*s2;
end
rectangle('Position',[0,0,m,n]) %给定起点[0,0] 矩形宽w高h
hold on
%%%%%%%%%%%%%%%%%%%%%%%画基数列的圆
for k=1:2:7
for p=1:6
sita=0:0.05:2*pi;
plot(x(k),y(p));
plot(x(k)+r*cos(sita),y(p)+r*sin(sita));
axis equal
end
end
%%%%%%%%%%%六边形
for k=1:2:7
for p=1:6
sita=0:pi/3:2*pi;
plot(x(k)+r*cos(sita),y(p)+r*sin(sita),'r');
axis equal
end
end %%%%%%%%%%%%%%%%%%%%%%%%%画偶数列的圆
for k=2:2:7
for p=1:7
sita=0:0.05:2*pi;
plot(x(k),y(p)+(s2/2));
plot(x(k)+r*cos(sita),y(p)-s2/2+r*sin(sita));
axis equal
end
end
%%%%%%%%%%%六边形
for k=2:2:7
for p=1:6
sita=0:pi/3:2*pi;
plot(x(k)+r*cos(sita),y(p)-s2/2+r*sin(sita),'r'); axis equal
end
end
hold off
21。

相关文档
最新文档