0

我制作了一个程序,该程序生成由同心环组成的图像,其值由随机数给出:

cx=20;cy=20;ix=40;iy=40;
[x,y]=meshgrid(-(cx-1):(ix-cx),-(cy-1):(iy-cy));  
a=zeros(40,40);
x1=rand(1,20);

for j= 1:20
%%inner radius
R=j-1;
c1=((x.^2+y.^2)<=R^2);
n1=not(c1);
%%outer radius
R=j;
c2=((x.^2+y.^2)<=R^2);
rj=bitand(c2,n1);
rj=rj.*x1(1,j);
a=imadd(a,rj);
end
imshow(a)

问题是我想获得连续的图像,就好像钻机正在有序移动一样。所以我使用了 circshift 函数,我的代码现在是这样的:

cx=20;cy=20;ix=40;iy=40;
[x,y]=meshgrid(-(cx-1):(ix-cx),-(cy-1):(iy-cy));  
a=zeros(40,40);
x1=rand(1,20);
for i= 1:20
xc=circshift(x1,[1 i-1]);
%%inner radius
R=j-1;
c1=((x.^2+y.^2)<=R^2);
n1=not(c1);
%%outer radius
R=j;
c2=((x.^2+y.^2)<=R^2);
rj=bitand(c2,n1);
rj=rj.*xc(1,j);
a=imadd(a,rj);
end
imshow(a)

并且程序没有运行。任何人都可以帮助我吗?此致。

4

1 回答 1

0

您正在循环“i”,而在您的循环中,您同时使用 i 和 j,就像在您之前的代码中一样,Matlab 无法识别并可能将其解释为虚数单位。无论如何,使用所有 j 工作正常;我稍微修改了您的代码,以便我们可以看到圆圈在增长:

clear all
clc
close all

cx=20;cy=20;ix=40;iy=40;

[x,y]=meshgrid(-(cx-1):(ix-cx),-(cy-1):(iy-cy));
a=zeros(40,40);
x1=rand(1,20);

for j= 1:20
    xc=circshift(x1,[1 j-1]);
    %%inner radius
    R=j-1;
    c1=((x.^2+y.^2)<=R^2);
    n1=not(c1);
    %%outer radius
    R=j;
    c2=((x.^2+y.^2)<=R^2);
    rj=bitand(c2,n1);
    rj=rj.*xc(1,j);
    a=imadd(a,rj);

    imshow(a) % Put imshow in the loop
    pause(0.05) % little pause (0.05 seconds)
end
于 2014-09-30T21:14:35.150 回答