piero_goku
30-11-2009, 13:12
Scusate, potreste dirmi in un ciclo di for dopo una determinata condizione e dopo aver aggiornato le variabili sempre con il for come faccio a farlo ripartire da zero resettando e riportando la variabile contatore all'inizio?
Se pongo nel for i=1 matlab neanche mi caca e mi dice che ho cambiato l'indice nel loop...come posso fare?
Non ho capito bene la domanda: tu hai un ciclo for che ad ogni ciclo controlla una condizione, se questa è rispettata esce dal ciclo altrimenti cambia delle variabili e aggiorna un contatore? cioè, non ho capito bene cosa fa questo ciclo XD
piero_goku
30-11-2009, 16:02
Il ciclo segue le sue itruzioni e mi aggiorna delle variabili.
Poi c'è un' ultima condizione che io gli do per cambiarmi le condizioni al contorno e dovrei far ripartire lo stesso ciclo di for...io metto la condizione i=1, ma quello non mi caca proprio:
% Programmino che permette di visualizzare la traiettoria della caduta di un masso da un pendio
% e permette di progettare una Barriera Paramassi
%==================================================================================================================
clc;
clear;
% === Disegno di un pendio per punti cartesiani ===
% Inserisci 6 punti: i primi due sono le posizioni iniziali.
xi=0;
yi=30;
%Il terzo e il quarto sono quelli di P0 relative alle condizioni iniziali (Vox Voy t=0)
x0=2;
y0=29;
%------
x1=4;
y1=20;
x2=5;
y2=12;
x3=8;
y3=0;
x4=20;
y4=0;
n=2 % varia n per controllare la risoluzione del grafico e deve essere sempre un intero > 1
pendio6punti(xi,yi,x0,y0,x1,y1,x2,y2,x3,y3,x4,y4,n);
clc;
[mi0,ni0]= RettaPer2(xi,yi,x0,y0);
[m01,n01]= RettaPer2(x0,y0,x1,y1);
[m12,n12]= RettaPer2(x1,y1,x2,y2);
[m23,n23]= RettaPer2(x2,y2,x3,y3);
[m34,n34]= RettaPer2(x3,y3,x4,y4);
alfai0=atan(mi0);
alfa01=atan(m01);
alfa12=atan(m12);
alfa23=atan(m23);
alfa34=atan(m34);
% === Triettoria del masso secondo la teoria "Lumped Mass" ===
% Dati iniziali:
Vox=1.5;
Voy=-1;
t=0:0.001:5;% tempo in secondi
g=9.81; % acc. gravità [m/s^2]
ax=0;
ay=-g;
niter=4000;
xp=zeros(1,niter);
yp=zeros(1,niter);
x=zeros(1,niter);
y=zeros(1,niter);
Vy=zeros(1,niter);
eps=0.0001;
KN=0.3;
KT=0.7;
alfa=0;
cont=1:niter;
for i=cont
Vx=Vox;
Vy(i)=-g*t(i)+Voy;
x(i)=Vox*t(i)+x0;
y(i)=(-(1/2)*g*(t(i))^2)+Voy*t(i)+y0;
if x(i)<=x1 && x(i)>x0
xp(i)=((((-(1/2)*g*(t(i))^2)+(Voy*t(i))+y0)-y0)*((x1-x0)/(y1-y0)))+x0;
yp(i)=y0+(y1-y0)*(((Vox*t(i)+x0)-x0)/(x1-x0));
alfa=alfa01;
else if x(i)<=x2 && x(i)>x1
xp(i)=((((-(1/2)*g*(t(i))^2)+(Voy*t(i))+y0)-y1)*((x2-x1)/(y2-y1)))+x1;
yp(i)=y1+(y2-y1)*(((Vox*t(i)+x0)-x1)/(x2-x1));
alfa=alfa12;
else if x(i)<=x3 && x(i)>x2
xp(i)=((((-(1/2)*g*(t(i))^2)+(Voy*t(i))+y0)-y2)*((x3-x2)/(y3-y2)))+x2;
yp(i)=y2+(y3-y2)*(((Vox*t(i)+x0)-x2)/(x3-x2));
alfa=alfa23;
else
xp(i)=((((-(1/2)*g*(t(i))^2)+(Voy*t(i))+y0)-y3)*((x4-x3)/(y4-y3)))+x3;
yp(i)=y3+(y4-y3)*(((Vox*t(i)+x0)-x3)/(x4-x3));
alfa=alfa34;
end
end
end
if (x(i)==xp(i)&& y(i)==yp(i))||(x(i)-xp(i)<=eps && y(i)-yp(i)<=eps)
x0=xp(i);
y0=yp(i);
Vpre=sqrt((Vx^2)+(Vy(i))^2);
VpreN=Vpre*cos(alfa);
VpreT=Vpre*sin(alfa);
VpostN=-VpreN*KN;
VpostT=VpreT*KT;
Vpost=sqrt((VpostN^2)+(VpostT^2));
gamma=atan(VpostN/VpostT);
beta=gamma-alfa;
Vox=Vpost*cos(beta);
Voy=Vpost*sin(beta);
i=1; ------->qui mi servirebbe ripartire con il ciclo perchè il tempo deve ricominciare da zero per disegnarmi una nuova parabola
end
end
plot(x,y)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.