bonjour,
quelqu'un saurait-il comment construire dans matlab une spirale d'archimede ?
merci
bonjour,
quelqu'un saurait-il comment construire dans matlab une spirale d'archimede ?
merci
Quelle est le problème exactement ?
Calculer les valeurs de la courbe ou bien la tracer ?
=> http://fr.wikipedia.org/wiki/Spirale_d%27Archim%C3%A8de
bonjour,
desolé, j'ai pas bien explicité" le problème.
je voudrais construire la spirale pour des valeurs données mais avec un pas constant de l'abscisse curviligne, je ne peux donc pas mettre un pas de theta constant.
Il faut utiliser l'équation de la spirale en coordonnées polaires r = k a (où k est une constante et a l'angle).
Normalement Matlab permet de dessiner des courbes en fournissant des coordonnées non cartésiennes (polaires par exemple)
Pour plus de détail:
http://www.mathcurve.com/courbes2d/a...rchimede.shtml
@+
si j'échantillonne avec un theta constant, l'abscisse curviligne sur la courbe va grandir.Il faut utiliser l'équation de la spirale en coordonnées polaires r = k a (où k est une constante et a l'angle).
Salut einstein84!
Tu peux regarder l'exemple d'ici pour ce que tu veux faire.
De ce que je veux il y a une description tres utile pour toi:
"create any kind of spirals, give them volume and export them to workspace."
Voia le lien:
http://www.mathworks.com/matlabcentr...exchange/23192
J'espere que ca t'aidera!
Bonne chance,
Michel
Ici un petit example pour toi dans command window que tu peux integrer dans un script.m:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 >> t = linspace(0,20*pi,1000); x = t.*cos(t); y = t.*sin(t); plot(x,y) %tracer la spirale avec plot
bonsoir,
dans le code que tu m'as joint je peux lire:
ça fait un pas de theta constant donc une coordonnées curviligne croissante
Code : Sélectionner tout - Visualiser dans une fenêtre à part theta=0:pr:lengt*pi;
Bon c'est tres bien donc.
Ca resolu une part de ce que tu veux faire?
a chaque pas de ta spirale (t*cos(t), t*sin(t)) tu es sur un cercle de rayon t. donc en première approximation, la longueur de ton pas est t*dt.
si dt = 1/t, ton pas est constant.
j'ai pas essayé. si ça t'aide tant mieux, si c'est de la bouillie mes excuses ;-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 t = 0.1:0.1:10 ; t = 1./t ; plot(t.*cos(t), t.*sin(t))
bonjour,
la coordonnées curviligne de la spirale a l'expression: sqrt(1+theta^2)+arcosh(thata) autant dire que pour avoir ce pas cte, il faut inverser cette equation.
c'est un peu galere
On peut iterativement calculer les valeurs de "t" (theta), de façon a ce que le périmètre parcouru entre t et t+dt demeure constant.
Perimetre(t) = d.Aire(t) / dt = d(r².t^3/6)/dt = r².t²/2
Le périmètre parcouru entre t et t+dt est donc :
Perimetre(t+dt)-Perimetre(t) = r².(t+dt)²/2 - r².t²/2 = r²/2.( dt² + 2.t.dt )
En posant cette grandeur comme constante = "step", on a une équation quadratique:
dt² + 2.t.dt - 2*step/r² = 0
d'ou on peut calculer dt en fonction de t, step et r:
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 double r=1, step=3, t=0; for(int i=0;i<100;i++) { Point2D p = new Point2D( t*r*Math.cos(t) , t*r*Math.sin(t) ); // solve dt² + 2.t.dt - 2.step/r² = 0 double a =1, b=2*t, c=-2*step/(r*r); double delta = b*b - 4*a*c; double dt = (-b + Math.sqrt(delta))/(2*a); t+=dt; }
CQFD.
merci.
equivalent matlab:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 r=0.1; step=0.01; t=0; for i=2:10000 p(i-1,:) = [ t*r*cos(t) , t*r*sin(t) ]; a =1;b=2*t; c=-2*step/(r*r); delta = b*b - 4*a*c; dt = (-b + sqrt(delta))/(2*a); t=t+dt; end plot(p(:,1),p(:,2))
Une version légèrement optimisée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 r = 0.1; step = 0.01; a = 1; c = -2*step/(r*r); N = 10000; t = zeros(1,N); for i=2:N b = 2*t(i-1); delta = b*b - 4*a*c; dt = (-b + sqrt(delta))/(2*a); t(i) = t(i-1)+dt; end p = [t.*r.*cos(t) ; t.*r.*sin(t)]; figure plot(p(1,:),p(2,:),'r-') axis equal
Bonjour PseudoCode
Je m'intéresse au problème soulevé à l'origine de ce fil, et je m'interroge sur la justification de cette assertion :
En effet, je sais pour ma part que la longueur d'arc parcourue entre t_1 et t_2 est l'intégrale de la racine de r² + r'² entre t_1 et t_2 :
Perimètre = int _{t_1} ^{t_2} sqrt{r²(t) + r'²(t)} dt
quand l'aire parcourue est la moitié de l'intégrale de r² entre t_1 et t_2 :
Aire = 1/2 int _{t_1} ^{t_2} r²(t) dt.
Or, quand je dérive cette dernière expression, je ne trouve pas la précédente.
Peux-tu m'éclairer s'il te plaît ?
Cordialement
Fred
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager