Why is my plot not working within my for loop?
12 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Julia Morandi
el 17 de Jul. de 2018
Comentada: Adam Danz
el 17 de Jul. de 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 comentarios
Adam Danz
el 17 de Jul. de 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.
Respuesta aceptada
Adam Danz
el 17 de Jul. de 2018
Editada: Adam Danz
el 17 de Jul. de 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 comentarios
Adam Danz
el 17 de Jul. de 2018
Editada: Adam Danz
el 17 de Jul. de 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.
Más respuestas (1)
Ver también
Categorías
Más información sobre Surrogate Optimization en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
