romanticide
Inscrit le: 13 Mar 2005 Messages: 47
|
Posté le: 01 Mai 2005 18:07 Sujet du message: courbure et lignes polygonales |
|
|
bonjour
je dois maintenant tracer des lignes polygonales en fonction de la courbure
plus la courbure est grande plus je prends de points et donc plus il ya de lignes
je sais calculer la courbure en un point
puis je voudrais réaliser une procédure qui me donne des points en fonction de la courbure je choisis un pas h0
si la courbure est trop gde alors je réduis le pas h:=h0/courbure et je crée ma liste d'abscisses
puis j'utilise ma procédure polygon pour tracer les lignes à partir de ma liste de points
mais j'ai un problème avec 'absd' ( valeur absolue) et pour calculer un déterminant dans ma procedure pour la longueur de courbe (voir [color=red]Delta[/color])
de plus la liste des abscisses ne s'affiche pas
voici mon code
Procédure calcul de la courbure
> Courbure:=proc(T)
> local g1,g2,d1,d2,dd1,dd2,D1,D2,ds,Mat,Delta,Courb;
> g1:=sin(2*t);g2:=sin(3*t);
> 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]]);
> [color=red]Delta[/color]:=(d1*dd2-d2*dd1);
> Courb:=evalf(subs(t=T,Delta/ds^3));print(`Courbure=`,Courb);
> end:
> Courbure(Pi/4);
Courbure=, -.8888888895
>
Rectification courbure
> List:=[];
> w:=h(sin(2*t),sin(3*t));
> Intdef:=[0,2*Pi];
List := []
w := h(sin(2 t), sin(3 t))
Intdef := [0, 2 Pi]
> Rectcourb:=proc(Expr,Int,n)
> local a,b,g1,g2,h0,x,Listx,i,Go,Cc,h,d;
> a:=op(1,Int);b:=op(2,Int);
> g1:=op(1,Expr);g2:=op(2,Expr);
> h0:=(b-a)/n;
> x:=a;
> Listx:=[a];
> i:=0;
> Go:=true;
> while Go do
> i:=i+1;d:=Courbure(x);
> Cc:=abs(d);
> if Cc<1 then h:=h0;
> else h:=h0/Cc;
> fi;
> x:=x+h;
> Listx:=[op(Listx),x];
> Go:=evalb(x<(b+h0));
> od;
> Listx;
> end:
>
> Rectcourb(w,Intdef,50);
Courbure=, -0.
[color=violet]
Error, (in simpl/abs) expecting 1 or 2 arguments, got 0[/color]
merci |
|