Randomization... if not this then that

Here is my code:
random = rand(1)
if random <(1/4)
tri1 = downtri
b1 = vertbaseq1
elseif random>=(1/4) && random<(2/4)
tri1 = uptri
b1 = vertbaseq1
elseif random>=(2/4) && random<(3/4)
tri1 = righttri
b1 = horzbaseq1
elseif random>=(3/4) && random<(4/4)
tri1 = lefttri
b1 = horzbaseq1
end
if random <(1/4)
tri2 = downtri
b2 = vertbaseq2
elseif random>=(1/4) && random<(2/4)
tri2 = uptri
b2 = vertbaseq2
elseif random>=(2/4) && random<(3/4)
tri2 = righttri
b2 = horzbaseq2
elseif random>=(3/4) && random<(4/4)
tri2 = lefttri
b2 = horzbaseq2
end
...
So what this code basically does is randomize between four different triangles at four different locations. The problem: it randomizes the same triangle to each location. I need the some code that says something like if triangle 1 (tri1) is an up triangle (uptri) then triangle 2 will be any triangle that isn't an up triangle.
any help would be greatly, greatly! appreciated, Brett

 채택된 답변

Image Analyst
Image Analyst 2012년 11월 25일

0 개 추천

After your first if, have this instead of the second if:
if tri1 == uptri
% Triangle 2 can't be an uptriangle.
random = rand(1);
if random <(1/3)
tri2 = downtri
b2 = vertbaseq2
elseif random>=(1/3) && random<(2/3)
tri2 = righttri
b2 = horzbaseq2
else
tri2 = lefttri
b2 = horzbaseq2
end
else
% Triangle 2 can be anything.
if random <(1/4)
tri2 = downtri
b2 = vertbaseq2
elseif random>=(1/4) && random<(2/4)
tri2 = uptri
b2 = vertbaseq2
elseif random>=(2/4) && random<(3/4)
tri2 = righttri
b2 = horzbaseq2
elseif random>=(3/4) && random<(4/4)
tri2 = lefttri
b2 = horzbaseq2
end
end

댓글 수: 4

Brett
Brett 2012년 11월 26일
편집: Brett 2012년 11월 26일
Sorry, I didn't explain the problem well - this does exactly what I said, so thank you. But what I need is that triangle 2 be any triangle that triangle 1 is not (if tri1 = uptri,then tri2 = [downtri, righttri or lefttri] or if tri1 = righttri, tri2 = [downtri, uptri or lefttri] etc). Is there a way to make it so tri2 doesn't equal the value of tri1?
Image Analyst
Image Analyst 2012년 11월 26일
편집: Image Analyst 2012년 11월 26일
Try randperm then to make sure they are different:
random = randperm(4)
random1 = random(1)
random2 = random(2)
% random1 and random2 are guaranteed to be different
% First assign triangle1
if random1 == 1
tri1 = downtri
b1 = vertbaseq1
elseif random1 == 2
tri1 = uptri
b1 = vertbaseq1
elseif random1 == 3
tri1 = righttri
b1 = horzbaseq1
else
tri1 = lefttri
b1 = horzbaseq1
end
% Next assign triangle2
% Remember random1 and random2 are different
% so triangle2 will be different than triangle1.
if random2 == 1
tri2 = downtri
b2 = vertbaseq2
elseif random2 == 2
tri2 = uptri
b2 = vertbaseq2
elseif random2 == 3
tri2 = righttri
b2 = horzbaseq2
else
tri2 = lefttri
b2 = horzbaseq2
end
Brett
Brett 2012년 11월 27일
This works perfectly! I can't thank you enough!
Image Analyst
Image Analyst 2012년 11월 27일
You're welcome. Not bad for me just writing it and not even being able to run it or test it!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

질문:

2012년 11월 25일

Community Treasure Hunt

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

Start Hunting!

Translated by