How to randomize the color of two objects so that are not the same color?

4 views (last 30 days)
Here is my code:
random = rand(1)
if random <(1/4)
colour1 = [200 200 0]
elseif random>=(1/4) && random<(2/4)
colour1 = [200 0 0]
elseif random>=(2/4) && random<(3/4)
colour1 = [0 200 0]
elseif random>=(3/4) && random<(4/4)
colour1 = [0 0 200]
end
The above code works great - when I run the program it randomizes the color of an object between 4 different colors. However, I need code that randomizes the colors of another object so that if colour1 = [200 000 000], it will be one of the three available colors. I essentially need code that says something like colour2 (does not)= colour1, randomize the other three colors.
Any help would be very, very appreciated. :)

Accepted Answer

Walter Roberson
Walter Roberson on 13 Nov 2012
colarray = [200 200 0; 200 0 0; 0 200 0; 0 0 200];
colidx1 = randi(4,1,1);
colour1 = colarray(colidx1,:);
colidx2 = randi(4,1,1);
while ismember(colidx2, colidx1)
colidx2 = randi(4,1,1);
end
color2 = colarray(colidx2,:);
colidx3 = randi(4,1,1);
while ismember(colidx3, [colidx1, colidx2])
.... and you should be able to finish from here
  2 Comments
Walter Roberson
Walter Roberson on 13 Nov 2012
This can be improved quite a bit if you are willing to modify your variables slightly:
numobj = 4; %can be less than number of colors
colarray = [200 200 0; 200 0 0; 0 200 0; 0 0 200];
colidx = randperm(size(colarray,1));
colidx = colidx(1:numobj);
color = colarray(colidx, :);
And if you have one of the newer versions of MATLAB this can be reduced slightly:
numobj = 4; %can be less than number of colors
colarray = [200 200 0; 200 0 0; 0 200 0; 0 0 200];
colidx = randperm(size(colarray,1), numobj);
color = colarray(colidx, :);
These do not generate separate variables for the colors, they generate an array in which the rows correspond to the colors for the different objects.

Sign in to comment.

More Answers (1)

Image Analyst
Image Analyst on 13 Nov 2012
Why can't you just set the color of colour2 at the same time as when you set colour1, inside the if statements? Just set it to one of the other colors, one of the ones you didn't set colour1 to.
  1 Comment
Brett
Brett on 13 Nov 2012
Because I planned on adding 4 different color combinations on four different objects. This would mean writing 254 different combinations... yikes.

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!