美文网首页
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