romanticide
Inscrit le: 13 Mar 2005 Messages: 47
|
Posté le: 14 Mai 2005 10:22 Sujet du message: petit problème |
|
|
bonjour
je veux lancer un programme qui fonctionne à l'origine pour une courbe pour deux courbes j'ai ajouter uen boucle for dans la zone interactive pour qu'il lance le programme deux fois de suite
mais il m'affiche des listes de points qui n'apparaissent pas quand je lance le programme initial qui n'est que pour une courbe
j'espère que c'est à peut prêt clair !
Code: |
>with(plots): Tracé d'une courbe paramétrée :
Affichage de la courbe
> AffCurv:=proc(Expr)
> local g1,g2;
> g1:=op(1,Expr);g2:=op(2,Expr);
> print(`g1 `=g1);print(`g2 `=g2);
> end:
Tracé de la courbe
> TracCurv:=proc(Expr,Min,Max)
> local g1,g2,Curv;
> g1:=op(1,Expr);g2:=op(2,Expr);
> Curv:=[g1,g2,t=Min..Max];
> plot(Curv,scaling=constrained,numpoints=100,color=blue);
> end:
Rectification et Longueur :
Calcul de la longueur
> CalCurv:=proc(Expr,Min,Max)
> local g1,g2,d1,d2,ds,L,s,e;
> g1:=op(1,Expr);g2:=op(2,Expr);
> d1:=diff(g1,t);d2:=diff(g2,t);
> print(`d1 =`,d1); print(`d2 =`,d2);
> ds:=sqrt((d1^2)+(d2^2));
> print(`ds =`,ds);
> L:=Int(ds,t=Min..Max);
> print(`L =`,L);
> s:=simplify(L);
> e:=evalf(s);
> print(`Long `=e);
> end:
Rectification
> Repproc:=proc(Expr,a,b,Err)
> local A,B,X,Y,Dist,g1,g2,d1,d2,R,L,Lg,Pt,c,List;
> A:=[subs(t=a,op(1,Expr)),subs(t=a,op(2,Expr))];
> B:=[subs(t=b,op(1,Expr)),subs(t=b,op(2,Expr))];
> List:=[];c:=0;
> X:=(op(1,B)-op(1,A));Y:=(op(2,B)-op(2,A));
> Dist:=sqrt(X^2+Y^2);
> d1:=diff(op(1,Expr),t);d2:=diff(op(2,Expr),t);
> R:=sqrt((d1^2)+(d2^2));
> L:=Int(R,t=a..b);
> Lg:=evalf(L);
> if evalf(Lg-Dist)>evalf(Err) then
> List:=[op(List),op(Repproc(Expr,a,(a+b)/2,Err))]:
> List:=[op(List),op(Repproc(Expr,(a+b)/2,b,Err))]
> else
> List:=[op(List),map(evalf,A),map(evalf,B)]:
> fi;
> List
> end:
Discrétisation et courbure :
Calcul de la courbure
> Courbure1:=proc(Expr,T)
> local g1,g2,d1,d2,dd1,dd2,D1,D2,ds,Mat,Delta,Courb,x;
> g1:=op(1,Expr);g2:=op(2,Expr);
> d1:=diff(g1,t);d2:=diff(g2,t);
> D1:=[d1,d2];
> print(`Dérivées premières =`,D1);
> ds:=sqrt(d1^2+d2^2);
> print(`ds =`,ds);
> dd1:=diff(d1,t);dd2:=diff(d2,t);
> D2:=[dd1,dd2];
> print(`Dérivées secondes =`,D2);
> Mat:=matrix([[d1,dd1],[d2,dd2]]);
> print(`Matrice =`,Mat);
> Delta:=(d1*dd2-d2*dd1);
> print(`Delta =`,Delta);
> x:=Delta/ds^3;
> print(`Formule de la courbure :`);
> print(x);
> print(` `);
> print(`Courbure : `);
> Courb:=evalf(subs(t=T,Delta/ds^3));
> end:
Calcul de la courbure pour la discrétisation
> Courbure:=proc(Expr,T)
> local g1,g2,d1,d2,dd1,dd2,D1,D2,ds,Mat,Delta,Courb;
> g1:=op(1,Expr);g2:=op(2,Expr);
> d1:=diff(g1,t);d2:=diff(g2,t);
> D1:=[d1,d2];
> ds:=sqrt(d1^2+d2^2);
> dd1:=diff(d1,t);dd2:=diff(d2,t);
> D2:=[dd1,dd2];
> Mat:=matrix([[d1,dd1],[d2,dd2]]);
> Delta:=(d1*dd2-d2*dd1);
> Courb:=evalf(subs(t=T,Delta/ds^3));
> end:
Discrétisation et courbure
> Rectcourb:=proc(Expr,Int,n)
> local a,b,g1,g2,h0,x,Listx,i,Go,Cc,h,d;
> a:=evalf(op(1,Int));b:=evalf(op(2,Int));
> g1:=op(1,Expr);g2:=op(2,Expr);
> h0:=evalf((b-a)/n);
> x:=a;
> Listx:=[[subs(t=a,op(1,Expr)),subs(t=a,op(2,Expr))]];
> i:=0;
> Go:=true;
> while Go do
> i:=i+1;d:=Courbure(w,x);
> Cc:=abs(d);
> if Cc<1 then h:=h0;
> else h:=h0/Cc;
> fi;
> x:=evalf(x+h);
> Listx:=[op(Listx),[subs(t=x,op(1,Expr)),subs(t=x,op(2,Expr))]];
> Go:=evalb(x<b+h0);
> od;
> Listx;
> end:
>
Zone Inter-Active
> print(`Courbe paramétrée de paramètre t :`);
> w1:=[sin(2*t),sin(3*t)];
> w2:=[cos(2*t)+2*cos(t),sin(2*t)];
> print(` `);
>
> print(`Intervalle de définition :`);
> Intdef:=[0,2*Pi];
> print(` `);
>
> for i to 2 do
> if i=1 then w:=w1;
> fi;
> if i=2 then w:=w2;
> fi;
>
> print(`Composantes de la courbe paramétrée :`);
> AffCurv(w);
> print(` `);
> print(`Graphe de la courbe :`);
> print(` `);
> TracCurv(w,0,2*Pi);
> print(` `);
>
> print(`Longueur de la courbe :`);
> CalCurv(w,0,2*Pi);
> print(` `);
>
> print(`Rectification à 0.01 :`);
> print(` `);
> Ligne:=plot(Repproc(w,0,2*Pi,10^(-2)),color=blue,style=line):
> Point:=plot(Repproc(w,0,2*Pi,10^(-2)),color=red,style=point):
> display({Ligne,Point});
> print(` `);
>
> print(`Rectification à 0.001 :`);
> print(` `);
> Ligne:=plot(Repproc(w,0,2*Pi,10^(-3)),color=blue,style=line):
> Point:=plot(Repproc(w,0,2*Pi,10^(-3)),color=red,style=point):
> display({Ligne,Point});
> print(` `);
>
> x:=Pi/4:
> print(`Calcul de la courbure au point :`,x);
> Courbure1(w,x);
> print(` `);
>
> print(`Discrétisation et courbure :`);
> print(` `);
> Ligne:=plot(Rectcourb(w,Intdef,100),color=green,style=line):
> Point:=plot(Rectcourb(w,Intdef,100),color=red,style=point):
> display({Ligne,Point});
> print(` `);
>
> print(`Graphe, discrétisation et courbure :`);
> print(` `);
> Ligne:=plot(Rectcourb(w,Intdef,100),color=green,style=line):
> Point:=plot(Rectcourb(w,Intdef,100),color=red,style=point):
> display({Ligne,Point,TracCurv(w,0,2*Pi)});
> od;
|
merci |
|