教教我用matlab画多边形图形

img


求求教我一下怎么把这玩意用matlab画出来,还能读取顶点,谢谢啦

你好同学,绘制蜂窝的matlab代码,供参考:

function hex_honeycomb(width)
%hex_honenycomb This function plots a hexagonal honeycomb structure and allows to plot  
%heatmap for each individual hexagonal segment for a given data set
%the first segment starts at the bottom of the left most column and goes up
%to a given height and starts back down at the following column and repeats
w_check = false;
while w_check == false
    if mod(width,2) == 0 || width < 3
        width = input("Error. Please enter an odd value greater than 3: ");
    else
        w_check = true;
    end
end
segment_height = 10;
height=ceil(width/2);
horz_delta = (segment_height/2)/sqrt(3);
vert_delta = segment_height/2;
x_centers = zeros(width,1);
x_centers(1) = 2*horz_delta;
for i=2:width
    x_centers(i) = x_centers(i-1)+3*horz_delta;
end
ycenters_odd = zeros(width-1,1);
ycenters_even = zeros(width,1);
ycenters_even(1) = segment_height/2;
ycenters_odd(1) = segment_height;
for i=2:width
    ycenters_odd(i) = ycenters_odd(i-1)+segment_height;
    ycenters_even(i) = ycenters_even(i-1)+segment_height;
end
if width==3
    offset=zeros(width,1);
elseif mod(width,4)==1
    offset= zeros(width,1);
    offset(height)=0;
    j=1;
    for i=1:0.5:height/2
        offset(height-j) = floor(i);
        offset(height+j) = floor(i);
        j=j+1;
    end
else
    offset= zeros(width,1);
    offset(height-1:height+1,:)=0;
    j=2;
    for i=1:0.505:height/2
        offset(height-j) = floor(i);
        offset(height+j) = floor(i);
        j=j+1;
    end
end
height_check = false;
face=1:6;
segment = 1;
for i=1:width
    for k = 1:height
        if mod(i,2) == true
            xy_seg = [x_centers(i)-horz_delta ycenters_odd(k+offset(i))-vert_delta;
                x_centers(i)+horz_delta ycenters_odd(k+offset(i))-vert_delta;
                x_centers(i)+2*horz_delta ycenters_odd(k+offset(i));
                x_centers(i)+horz_delta ycenters_odd(k+offset(i))+vert_delta;
                x_centers(i)-horz_delta ycenters_odd(k+offset(i))+vert_delta;
                x_centers(i)-2*horz_delta ycenters_odd(k+offset(i));];
        else
            xy_seg = [x_centers(i)-horz_delta ycenters_even(k+offset(i))-vert_delta;
                x_centers(i)+horz_delta ycenters_even(k+offset(i))-vert_delta;
                x_centers(i)+2*horz_delta ycenters_even(k+offset(i));
                x_centers(i)+horz_delta ycenters_even(k+offset(i))+vert_delta;
                x_centers(i)-horz_delta ycenters_even(k+offset(i))+vert_delta;
                x_centers(i)-2*horz_delta ycenters_even(k+offset(i));];
        end
        patch('Faces',face,'Vertices',xy_seg,'FaceVertexCData',segment,'EdgeColor','black','FaceColor','flat','LineWidth',2);
        segment = segment+1;
    end
    if height_check == false
        height=height+1;
    else
        height = height-1;
    end
    if height == width+1
        height = width-1;
        height_check = true;
    end
end
colormap(jet)
axis equal
axis off
fig = gcf;
fig.WindowState = 'maximized';
fig.ToolBar = 'none';
end

运行示例:
hex_honeycomb(11) % 注意输入奇数

img

这种MATLAB画图的资源还是很多的,自己去学习一下吧