Is there a way to call a part of a function using an index?
Show older comments
I have a function that I call several times:
plot(position6(1),position6(2),'r+', 'MarkerSize', 100, 'Color', 'w');
h = images.roi.Circle(gca,'Center', position6,'Radius',100, 'Color', 'w', 'FaceAlpha', 0);
Where "position6" is one of N positions defined. Currently, I am manually defining each of them and writing these two lines of code for each position vector (which is in a matrix of vectors). Is there any way to condense this to make it neater, such that I can refer to each instance of the code using the index of the vector matrix? Perhaps with a function?
For example:
myfunc(6)
returns:
plot(position6(1),position6(2),'r+', 'MarkerSize', 100, 'Color', 'w');
h = images.roi.Circle(gca,'Center', position6,'Radius',100, 'Color', 'w', 'FaceAlpha', 0);
Thanks. Here's the full verson of the relevant code segment.
[rows, columns, numberOfColorChannels] = size(img);
figure;
imshow(img);
position1 = [(columns*0.75), (rows*0.5)];
position8 = [(columns*0.75), (rows*0.25)];
position9 = [(columns*0.75), (rows*0.75)];
position2 = [(columns*0.25), (rows*0.5)];
position6 = [(columns*0.25), (rows*0.25)];
position7 = [(columns*0.25), (rows*0.75)];
position3 = [(columns*0.5), (rows*0.5)];
position4 = [(columns*0.5), (rows*0.25)];
position5 = [(columns*0.5), (rows*0.75)];
position = {position1, position2, position3, position4, position5, position6, position7, position8, position9};
hold on;
plot(position{6}(1),position{6}(2),'r+', 'MarkerSize', 100, 'Color', 'w');
h = images.roi.Circle(gca,'Center', position{6},'Radius',100, 'Color', 'w', 'FaceAlpha', 0);
4 Comments
Steven Lord
on 23 Mar 2021
Please don't repost the same question when you've already received some comments and answers in this one. If you feel you need to clarify the question, post comments in this one.
Teshan Rezel
on 23 Mar 2021
Edited: Teshan Rezel
on 23 Mar 2021
Jan
on 23 Mar 2021
@Teshan Rezel: We usually do not delete questions, if they got an answer already. Simply insert a link to the new question by editing the text of your question and mark it by: "[EDITED, better version of the question: ... ] "
Teshan Rezel
on 23 Mar 2021
Accepted Answer
More Answers (1)
Do you mean you want to plot position6(1) versus position6(2) in the first call, position6(3) versus position6(4) in the second, etc.? That's easy, a simple for loop (incrementing by two) would be easiest.
for k = 1:2:10
fprintf("Processing elements %d and %d.\n", k, k+1)
end
Or do you want to plot position6(1) versus position6(2) in the first call, position7(1) versus position7(2) in the second, position8(1) versus position8(2) in the third, etc.?
13 Comments
Teshan Rezel
on 22 Mar 2021
Matt J
on 22 Mar 2021
Instead of position(3)(1), you should have position(3,1) with position organized as a matrix.
I agree with Matt J.
x = randi(10, 5, 2)
for k = 1:height(x)
v = x(k, :);
fprintf("Processing elements %d and %d.\n", v)
end
Teshan Rezel
on 22 Mar 2021
Edited: Teshan Rezel
on 22 Mar 2021
Teshan Rezel
on 22 Mar 2021
columns = 80;
rows = 24;
colMultipliers = [0.75; 0.25; 0.5; 0.5; 0.5; 0.25; 0.25; 0.75; 0.75];
rowMultipliers = [0.5; 0.5; 0.5; 0.25; 0.75; 0.25; 0.75; 0.25; 0.75];
positions = [columns*colMultipliers, rows*rowMultipliers]
Now work with the rows of the positions matrix.
Teshan Rezel
on 22 Mar 2021
Rik
on 23 Mar 2021
It is possible, but you should not be relying on numbered variables. If they are related enough for the numbers to mean anything, that means the numbers are data. Don't store data in a variable name. At the very least they could be a struct array or a cell array.
Teshan Rezel
on 23 Mar 2021
Rik
on 23 Mar 2021
If you don't tell us that position6(1) is actually position{6}(1), how are we supposed to give advice?
Teshan Rezel
on 23 Mar 2021
Rik
on 23 Mar 2021
This sounds as simple as:
myfun(position{6})
function h=myfunc(pos)
plot(pos(1),pos(2),'r+', 'MarkerSize', 100, 'Color', 'w');
h = images.roi.Circle(gca,'Center', pos,'Radius',100, 'Color', 'w', 'FaceAlpha', 0);
if nargout==0,clear,end
end
Or am I misunderstanding what it is you want?
Teshan Rezel
on 23 Mar 2021
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!