小圆实现平面全覆盖(密排、小圆覆盖椭圆)

小圆实现平面全覆盖(密排、小圆覆盖椭圆)根据圆密排定理 使用正六边形密排可以使空间利用率最高 即小圆与小圆之间重叠部分最小 用 matlab 实现 画出图像 本文代码是在 clean mark 的代码进行改进 小圆半径默认为 1 画出正六边形密排图像 X Y x 0 m x temp x y

大家好,我是讯享网,很高兴认识大家。

根据圆密排定理,使用正六边形密排可以使空间利用率最高,即小圆与小圆之间重叠部分最小。

用matlab实现,画出图像。本文代码是在clean-mark的代码进行改进。小圆半径默认为1。

画出正六边形密排图像:

X=[];Y=[]; x=0 m=x; temp=x; y=0 n=y; x=temp; a=0;a r=1; z=r*(3^(1/2))/2; p=x; q=p; j=y; for y=j:3/2*r:10 for x=p:r*3^(1/2):10 X=[X;x] Y=[Y;y] hold on a=a+1; end for x=p-r*(3^(1/2)):-r*(3^(1/2)):-10 X=[X;x] Y=[Y;y] hold on a=a+1; end p=p+z; end p=q-z; for y=j-3/2*r:-3/2*r:-10 for x=p:r*(3^(1/2)):10 X=[X;x] Y=[Y;y] hold on a=a+1; end for x=p-r*(3^(1/2)):-r*(3^(1/2)):-10 X=[X;x] Y=[Y;y] hold on a=a+1; end p=p+z; end voronoi(X,Y) 

讯享网

画出图像效果图:


讯享网

在上文基础上,取圆心画出小圆:

讯享网function []=plot1(x,y,r) theta=0:0.01:2*pi; Circle1=x+r*cos(theta); Circle2=y+r*sin(theta); plot(Circle1,Circle2,'r'); axis equal; end x=0 m=x; temp=x; y=0 n=y; x=temp; a=0;a r=1; z=r*(3^(1/2))/2; p=x; q=p; j=y; for y=j:3/2*r:10 for x=p:r*3^(1/2):10 if sqrt(x^2+y^2)-10<r plot1(x,y,r) hold on a=a+1; end end for x=p-r*(3^(1/2)):-r*(3^(1/2)):-10 if sqrt(x^2+y^2)-10<r plot1(x,y,r) hold on a=a+1; end end p=p+z; end p=q-z; for y=j-3/2*r:-3/2*r:-10 for x=p:r*(3^(1/2)):10 if sqrt(x^2+y^2)-10<r plot1(x,y,r) hold on a=a+1; end end for x=p-r*(3^(1/2)):-r*(3^(1/2)):-10 if sqrt(x^2+y^2)-10<r plot1(x,y,r) hold on a=a+1; end end p=p+z; end

画出图像效果图:

 在这基础上,实现在9*x^2+16*y^2=144的椭圆内用最少定长小圆进行全覆盖

xCenter = 0; yCenter = 0; xRadius = 4; yRadius = 3;theta = 0 : 0.01 : 2*pi;x1 = xRadius * cos(theta) + xCenter; y1 = yRadius * sin(theta) + yCenter; plot(x1, y1, 'LineWidth', 1) hold on x=0 m=x; temp=x; y=0 n=y; x=temp; a=0;a r=1; z=r*(3^(1/2))/2; p=x; q=p; j=y; for y=j:3/2*r:10 for x=p:r*3^(1/2):10 if 9*x*x+16*y*y<=144 plot1(x,y,r) hold on a=a+1; end end for x=p-r*(3^(1/2)):-r*(3^(1/2)):-10 if 9*x*x+16*y*y<=144 plot1(x,y,r) hold on a=a+1; end end p=p+z; end p=q-z; for y=j-3/2*r:-3/2*r:-10 for x=p:r*(3^(1/2)):10 if 9*x*x+16*y*y<=144 plot1(x,y,r) hold on a=a+1; end end for x=p-r*(3^(1/2)):-r*(3^(1/2)):-10 if 9*x*x+16*y*y<=144 plot1(x,y,r) hold on a=a+1; end end p=p+z; end X=[-1.73205;-1.73205;1.73205;1.73205;-4.33013;-4.33013;4.33013;4.33013];Y=[-3;3;-3;3;1.5;-1.5;1.5;-1.5]; for i=1:1:8 plot1(X(i),Y(i),r) end

图像效果:

 如果想要使覆盖效果更好,可以手动调整一下方向。

小讯
上一篇 2025-02-25 19:35
下一篇 2025-02-23 22:01

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28357.html