Why is my plot not working within my for loop?
14 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Julia Morandi
le 17 Juil 2018
Commenté : Adam Danz
le 17 Juil 2018
I am trying to plot multiple helices. With the code I am using (below) the helix is plotting how I want it to, however, only one helix is not plotting. Does anyone know why this may be the case?
clc;
clear variables;
close all;
n = input('number of revolutions ');
r = input('radius of stent ');
a = input('angle with respect to the upwards horizontal in degrees ');
w = input('number of wires ');
R = input('radius of wire ');
h=(2*n*pi*r)/tand(90-a); %height of stent determined by other inputs
e = (2*pi)/(w/2); %theta (spacing between where each wire starts)
if mod(w,2) ==0 %number of wires is even
else
fprintf('ERROR:number of wires must be even'); %stops code if wire number is odd
return
end
if mod(n,1) ==0 %number of revolutions is whole number
else
fprintf('ERROR:number of revolutions must be whole number');
return
end
for i=1:w/2
for t = (i-1)*e:2*pi/w:(n*2*pi)+e*(i-1); %t value for CCW helices
if mod(t,4*pi/w)==0
x{i} = (r-R)*sin(t);
y{i} = (r-R)*cos(t);
z{i} = (h/(n*2*pi))*t(1);
plot3(x{i},y{i},z{i},'.','MarkerSize',25,'MarkerFaceColor','red','MarkerEdgeColor','red')
hold on
else
x{i} = (r+R)*sin(t);
y{i} = (r+R)*cos(t);
z{i} = (h/(n*2*pi))*t(11);
plot3(x{i},y{i},z{i},'.','MarkerSize',25,'MarkerFaceColor','black','MarkerEdgeColor','black')
hold on
end
hold on
end
hold on
end
5 commentaires
Adam Danz
le 17 Juil 2018
Using those inputs, your code breaks in the 'else' section of your conditional at line
z{i} = (h/(n*2*pi))*t(11);
I'm guessing that t(11) is a mistake.
Réponse acceptée
Adam Danz
le 17 Juil 2018
Modifié(e) : Adam Danz
le 17 Juil 2018
Change
z{i} = (h/(n*2*pi))*t(11);
to
z{i} = (h/(n*2*pi))*t(1); %or whatever the index should be
and it works with the inputs you specified in the comment section above.
For inputs [2,20,34,12,1]

4 commentaires
Adam Danz
le 17 Juil 2018
Modifié(e) : Adam Danz
le 17 Juil 2018
But they mostly do not change (some do) so something's wrong with you code.
To start, you are currently only storing x,y,z values over the i-loop so you're overwriting a lot of the data making it impossible to look at all of the x,y,z values at once. I changed the code so you store ALL of the data for both i and t loops. If you go this route, you should allocate the x y z data prior to the loops.
figure
axis
hold on
for i=1:w/2
tAll = (i-1)*e:2*pi/w:(n*2*pi)+e*(i-1);
for t = 1:length(tAll); %t value for CCW helices
if mod(tAll(t),4*pi/w)==0
x(i,t) = (r-R)*sin(tAll(t));
y(i,t) = (r-R)*cos(tAll(t));
z(i,t) = (h/(n*2*pi))*tAll(t);
plot3(x(i,t),y(i,t),z(i,t),'.','MarkerSize',25,'MarkerFaceColor','red','MarkerEdgeColor','red')
else
x(i,t) = (r+R)*sin(tAll(t));
y(i,t) = (r+R)*cos(tAll(t));
z(i,t) = (h/(n*2*pi))*tAll(t);
plot3(x(i,t),y(i,t),z(i,t),'.','MarkerSize',25,'MarkerFaceColor','black','MarkerEdgeColor','black')
end
end
end
Now we can look at ALL of the x,y,z values and you can see that there are lots of duplicates. Here I show just the x values. The rows are iterations across the i-loop and the columns are across the t-loop. There are tiny differences between these numbers but they are close enough to be plotted on top of each other. It looks like there are about 6 near-repetitions for each (x,y,z) value and there also happens to be 6 'wires'.

If the values are not what you expect, you'll need to go through your code and figure out what went wrong.
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur Surrogate Optimization dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
