matlab编写渐变网格图

可运行的渐变网格图

clc
clear
close all

xlim1 = 0;
xlim2 = 20;
ylim1 = 0;
ylim2 = 20;

row = ylim2-ylim1;
col = xlim2-xlim1;

fit = zeros(row*col);
gri = zeros(row,col);

enpo = [0.5,0.5];
enx = enpo(1,1);
eny = enpo(1,2);
eni = row-floor(eny);
enj = ceil(enx);
en = (eni-1)*row+enj;

num = 19;

sur0 = en;
for i = 1:num
    sur1 = en-col*i;
    if sur1 <= 0
        sur1 = 0;
    end
    sur2 = en+col*i;
    if sur2 > row*col
        sur2 = 0;
    end
    sur3 = en-i;
    if sur3 <= en-enj
        sur3 = 0;
    end
    sur4 = en+i;
    if sur4 >= en+(col-enj+1)
        sur4 = 0;
    end
    sur0 = [sur0;sur1;sur2;sur3;sur4];
    for j = 1:i
        if j<i
            sur56 = en-col*j;
            if sur56 <= 0
                sur5 = 0;
                sur6 = 0;
            else
                sur5 = en-col*j-i;
                if sur5 < (eni-j-1)*col+1
                    sur5 = 0;
                end
                sur6 = en-col*j+i;
                if sur6 > (eni-j)*col
                    sur6 = 0;
                end
            end
            sur78 = en+col*j;
            if sur78 > row*col
                sur7 = 0;
                sur8 = 0;
            else
                sur7 = en+col*j-i;
                if sur7 < (eni+j-1)*col+1
                    sur7 = 0;
                end
                sur8 = en+col*j+i;
                if sur8 > (eni+j)*col
                    sur8 = 0;
                end
            end
            sur0 = [sur0;sur5;sur6;sur7;sur8];
        else
            for k = 1:i
                sur910 = en-col*j;
                if sur910 <= 0
                    sur9 = 0;
                    sur10 = 0;
                else
                    sur9 = en-col*j-k;
                    if sur9 < (eni-i-1)*col+1
                        sur9 = 0;
                    end
                    sur10 = en-col*j+k;
                    if sur10 > (eni-i)*col
                        sur10 = 0;
                    end
                end
                sur1112 = en+col*j;
                if sur1112 >= row*col
                    sur11 = 0;
                    sur12 = 0;
                else
                    sur11 = en+col*j-k;
                    if sur11 < (eni+i-1)*col+1
                        sur11 = 0;
                    end
                    sur12 = en+col*j+k;
                    if sur12 > (eni+i)*col
                        sur12 = 0;
                    end
                end
                sur0 = [sur0;sur9;sur10;sur11;sur12];
            end
        end
    end
end

surn = (2*num+1)^2-(2*num-1)^2;

gri1 = zeros(surn,num);
gri1(1,1) = en;

for i = 1:num
    j = (2*i+1)^2-(2*i-1)^2;
    k = (2*i-1)^2+1;
    sur00 = sur0(k:k+j-1);
    sur000 = sort(sur00,'ascend');
    gri1(:,i+1) = [sur000;zeros(surn-j,1)];
end

fit1 = (0);
for i = 1:num+1
    fit1(i,1) = i;
end

for i = 1:num+1
    gri2 = gri1(:,i);
    gri3 = find(gri2);
    gri4 = gri1(gri3,i);
    gri4n = length(gri4);
    for j = 1:gri4n
        grij = rem(gri4(j),row);
        if grij == 0
            grij = col;
        end
        grii = (gri4(j)-grij)/row+1;
        gri(grii,grij) = fit1(i,1);
    end
end

for i = 1:row
    for j = 1:col
        for k = 1:num+1
            if gri(i,j) == k
                x1 = j-1; y1 = row-i;
                x2 = j; y2 = row-i;
                x3 = j; y3 = row-i+1;
                x4 = j-1; y4 = row-i+1;
                fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.5,0.5*(k-1)/(num+1),0.1*(num+1-k)/(num+1)]);
                hold on
            elseif gri(i,j) == 0
                x1 = j-1; y1 = row-i;
                x2 = j; y2 = row-i;
                x3 = j; y3 = row-i+1;
                x4 = j-1; y4 = row-i+1;
                fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
                hold on
            end
        end
    end
end
hold on

grid on
axis equal
title('渐变图')
xlim([xlim1,xlim2])
ylim([ylim1,ylim2])
xlabel('X')
ylabel('Y')

运行结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值