原本复习期末无聊只想用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
网友评论