int screen_width = 340; int screen_height = 280; int num_particles = 1000; float[] particles = new float[num_particles*2]; float[] vel = new float[num_particles*2]; void setup() { size(340, 280, JAVA2D); strokeWeight(2); smooth(); background(104); fill(200, 200, 200); noStroke(); for (int i = 0; i < num_particles*2; i+=2) { particles[i] = random(2, screen_width-2); particles[i+1] = random(2, screen_height-2); } for (int i = 0; i < num_particles*2; i+=2) { vel[i] = random(-1,1); vel[i+1] = random(-1,1); } } void draw() { background(255); // update velocities for (int i = 0; i < num_particles*2; i+=2) { if (particles[i] + vel[i] > screen_width-2) { vel[i] *= -1;// + random(-10,10)/10; } else if (particles[i] + vel[i] < 2) { vel[i] *= -1;// + random(-10,10)/10; } if (particles[i+1] + vel[i+1] > screen_height-2) { vel[i+1] *= -1;// + random(-10,10)/10; } else if (particles[i+1] + vel[i+1] < 2) { vel[i+1] *= -1;// + random(-10,10)/10; } if (vel[i] > 4) vel[i] = 4; else if (vel[i] < -4) vel[i] = -4; if (vel[i+1] > 4) vel[i+1] = 4; else if (vel[i+1] < -4) vel[i+1] = -4; } // update positions for (int i = 0; i < num_particles*2; i+=2) { particles[i] += vel[i]; particles[i+1] += vel[i+1]; } // draw for (int i = 0; i < num_particles*2; i+=2) { float z = sin(particles[i]/25) + sin(particles[i+1]/25); float disparity = z*4 + 4; fill(255,0,0,127); ellipse(particles[i], particles[i+1], 2, 2); fill(47,255,255,127); ellipse(particles[i]+disparity, particles[i+1], 2, 2); //ellipse(random(0,screen_width), random(0,screen_height), 200, 150); //rect(random(0,screen_width),random(0,screen_height),random(0,screen_width),random(0,screen_height)); } } /* % four_ambiguous_motion_cylinder N = 100; % number of dots markersize = 2; % size of dots v = 0.04; % velosity nrep = 1000; % number of repeat pos = [522 160 875 816]; h = findobj('tag','rdot'); if isempty(h) figure('tag','rdot','color','k','doublebuffer','on','pos',pos) end r = 10; % random dot %x = cos(2*pi*rand(1,N)); y = rand(1,N)-0.25; ymax = 0.75; %sqrt(1 - x.^2c); dx_max = r*ymax*0.08; theta0 = 2*pi*rand(1,N); square_size = ymax * 0.1; wx = [-1 -1 1 1]' * square_size; wy = [-1 1 1 -1]' * square_size; t = 0; for i = 1:nrep t = t+v; Y = r*y; theta = theta0 + t; X = r*ymax.*cos(theta); dx = dx_max*(cos(theta-pi/2)+2); X_red = X + dx/2; %X_blue = X - dx/2; set(gca,'color','w') %alpha(0.5) % red squares %for n = 1:N % area(X_red(n) + wx, Y(n) + wy,'FaceColor','r') %end Xr = repmat(X_red,size(wx,1),1)+repmat(wx,1,size(X_red,2)); Yr = repmat(Y,size(wy,1),1)+repmat(wy,1,size(Y,2)); fill(Xr,Yr,'r','FaceAlpha',0.5,'EdgeColor','none'); hold on % blue squares %plot(X_blue,Y,'ob','MarkerFaceColor','b','Markersize',markersize); Xb = Xr-repmat(dx/2,size(wx,1),1);%repmat(X_blue,3,1)+repmat(wx',1,size(X_blue,2)); Yb = Yr;%repmat(Y,3,1)+repmat(wy',1,size(Y,2)); fill(Xb,Yb,[0.18 1 1],'FaceAlpha',0.5,'EdgeColor','none'); %hold on %plot(X+r*2.5,Y,'ow','MarkerFaceColor','w','Markersize',markersize); hold on %plot(X+r*2.5,Y+r*2.5,'ow','MarkerFaceColor','w','Markersize',markersize); hold on %plot(X,Y+r*2.5,'ow','MarkerFaceColor','w','Markersize',markersize); hold on set(gca,'color','w') axis([-r r -r r]) drawnow hold off end */