Info

This question is closed. Reopen it to edit or answer.

if [0 3 5 10] then first text box should be green, all the rest red. If [3 0 5 10] then second text box should be green. In following code, the color is not changing with change in number.

1 view (last 30 days)
function fig2n(x,figure1)
figure1=figure;
red=[1 0 0];
green=[0 1 0];
yellow=[1 .8 0];
% drawnow
x=[3 0 5 10];
if x(1)==0<=x(1)<=2
light1=green;
elseif x(2)==3<=x(2)<=4
light1=red;
elseif x(3)==5<=x(3)<=6
light1=red;
elseif x(4)==7<=x(4)<=10
light1=red;
end
if x(1)==3<=x(1)<=4
light2=red;
elseif x(2)==5<=x(2)<=6
light2=red;
elseif x(3)==7<=x(3)<=10
light2=red;
elseif x(4)==0<=x(4)<=2
light2=green;
end
if x(1)==5<=x(1)<=6
light3=red;
elseif x(2)==7<=x(2)<=10
light3=red;
elseif x(3)==0<=x(3)<=2
light3=green;
elseif x(4)==3<=x(4)<=4
light3=red;
end
if x(1)==7<=x(1)<=10
light4=red;
elseif x(2)==0<=x(2)<=2
light4=green;
elseif x(3)==5<=x(3)<=6
light4=red;
elseif x(4)==3<=x(4)<=4
light4=red;
end
annotation(figure1,'textbox',...
[0.38 0.46 0.03 0.067],...
'String',{x(1)},...
'FitBoxToText','on','FontWeight','bold',...
'EdgeColor','none','BackgroundColor',[1 1 1],'Color',light1);
annotation(figure1,'textbox',...
[0.48 0.35 0.03 0.067],...
'String',{x(2)},...
'FitBoxToText','on','FontWeight','bold',...
'EdgeColor','none','BackgroundColor',[1 1 1],'Color',light2);
annotation(figure1,'textbox',...
[0.58 0.46 0.03 0.067],...
'String',{x(3)},...
'FitBoxToText','on','FontWeight','bold',...
'EdgeColor','none','BackgroundColor',[1 1 1],'Color',light3);
annotation(figure1,'textbox',...
[0.48 0.57 0.03 0.067],...
'String',{x(4)},...
'FitBoxToText','on','FontWeight','bold',...
'EdgeColor','none','BackgroundColor',[1 1 1],'Color',light4);
end
  2 Comments
Image Analyst
Image Analyst on 31 Jan 2015
Please read this. Also, you might like to use control-a control-i in the MATLAB editor to clean up the formatting before you paste it in here.

Answers (1)

John D'Errico
John D'Errico on 31 Jan 2015
Please learn to use the code formatting button. Your code will be unreadable otherwise, and it takes only one click of the mouse to do!
To answer your question...
if x(1)==0<=x(1)<=2 light1=green;
This, while it is executable in MATLAB, does NOT do what you think it does. You think of that as a set of equalities and inequalities.
In fact, what MATLAB does is parse it as...
if ((x(1)==0)<=x(1))<=2 light1=green;
So, MATLAB does the first test, i.e., (x(1)==0).
The result of that will be either true(1) or false(0). Then it compares that numeric value to x(1). Again, the test will be either true(1) or false(0), which it then compares to the number 2.
But both of 0 or 1 will ALWAYS be less than the number 2. So no matter what x is, those tests will ALWAYS evaluate to true!
Instead, I think you wanted to write this as:
if (x(1)==0) && (0<=x(1)) && (x(1)<=2), light1=green;
The same applies to all of your other if statements. Just because you tend to use a shorthand notation for mathematics does not always mean that MATLAB will understand that notation.

This question is closed.

Community Treasure Hunt

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

Start Hunting!