美文网首页
MATLAB实现简单屏保

MATLAB实现简单屏保

作者: LittleBall | 来源:发表于2017-07-12 17:22 被阅读0次

    原本复习期末无聊只想用MATLAB画个黑底上有白圆的图片

    后来受我家小可爱启发把黑底用RGB彩色合成彩色,又让圆动了起来,就变成下面这样。

    挺有趣的,分享给大家。

    close all
    clear all
    % 图像尺寸 NxN
    N=1000;
    % 生成黑底图像 尺寸NxN
    R=uint8(ones(255,255));
    G=R;B=R;
    for i=1:255
        for j=1:255
            R(j,i)=j;
            G(i,j)=j;
            B(i,j)=255-j;
        end
    end
    im=imresize(cat(3,R,G,B),[N,N]);
    % 图像分为 area_num 个区
    area_num=36;
    % 每个区的宽度
    width=N/sqrt(area_num);
    % 每一行有多少个区s
    row_num=sqrt(area_num);
    % 参数方程法画圆
    theta=0:pi/100:2*pi;
    % 为 area_num 个圆的x y坐标分配空间
    x=cell(1,area_num);
    y=cell(1,area_num);
    % 存储圆心坐标及半径
    x0=ones(1,area_num);
    y0=ones(1,area_num);
    r=ones(1,area_num);
    % 生成所有圆的坐标
    for i=1:row_num
        for j=1:row_num
            pos=(i-1)*row_num+j;
            r(pos)=fix(100*rand);% 半径
            x0(pos)=fix(rand*(width-2*r(pos)))+r(pos)+width*(j-1); % 圆心 x 坐标
            y0(pos)=fix(rand*(width-2*r(pos)))+r(pos)+width*(i-1); % 圆心 y 坐标
            x{pos}=r(pos)*cos(theta)+x0(pos); % 圆上 x 坐标
            y{pos}=r(pos)*sin(theta)+y0(pos); % 圆上 y 坐标
        end
    end
    % 显示底图
    figure
    % 颜色列表
    color_list={'w','b','r','m','g'};
    % 画圆
    flag=ones(1,area_num);
    while(1)
        ax1=subplot(1,1,1),imshow(im);
        hold on
        for i=1:area_num
            if flag(i)==1
                if x0(i)<(N-r(i))
                    x{i}=x{i}+i;
                    plot(x{i},y{i},color_list{mod(i,5)+1});
                    x0(i)=x0(i)+i;
                else
                    flag(i)=0;
                end
            end
            if flag(i)==0
                if x0(i)>r(i)
                    x{i}=x{i}-i;
                    plot(x{i},y{i},color_list{mod(i,5)+1});
                    x0(i)=x0(i)-i;
                else
                    flag(i)=1;
                end
            end 
        end
        pause(0.05)
        cla(ax1)
    end         

    相关文章

      网友评论

          本文标题:MATLAB实现简单屏保

          本文链接:https://www.haomeiwen.com/subject/fwgbhxtx.html