Bonsoir,
Existe t-il une fonction Matlab qui donne les paramètres d'une hélice tel que le rayon et la pente à partir de ses coordonnées (fichier joint)?
merci d'avance![]()
Bonsoir,
Existe t-il une fonction Matlab qui donne les paramètres d'une hélice tel que le rayon et la pente à partir de ses coordonnées (fichier joint)?
merci d'avance![]()
Salut,
a ma connaissance, il n'existe pas de fonctions qui permette de calculer ces paramètres. Mais tu devrais pouvoir t'en sortir de manière empirique. Reste à savoir si ça peut te convenir.
Pour connaitre le rayon de ton hélice, il faut regarder du côté des valeurs en X ou en Y.
Pour connaitre le pas de ton hélice, il faut regarder la hauteur de répétition sur ton axe Z.
Avec ça, tu devrais pouvoir t'en sortir en utilisant les équations de l'hélice circulaire.
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
26 A=csvread('helix.csv'); X=A(:,1); Y=A(:,2); Z=A(:,3); subplot(1,3,1) plot3(X,Y,Z,'.') daspect([1 1 1]) subplot(1,3,2) plot3(X,Y,Z,'.') daspect([1 1 1]) view(180,0) subplot(1,3,3) plot3(X,Y,Z,'.') daspect([1 1 1]) view(2) % Rayon R=(abs(max(X))+abs(min(X)))/2; %ou R=(abs(max(Y))+abs(min(Y)))/2; %hauteur de ton pas (2 d'après ta courbe. Tu peux le faire varier suivant le nombre de répétition que tu as en Z) T=max(Z)/2;
bonsoir et merci pour ta réponse
J'ai crée une hélice circulaire avec le code suivant:
Pour le rayon je projette x et y sur un plan et je fais un fit circulaire pour obtenir le rayon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 >> t=0:0.03:4*pi; >> x=20*cos(t); >> y=20*sin(t); >> z=5*(t);
Mais pour ce qui est de la pente (dans l'exemple elle vaut 5), je ne sais plus comment m'y prendre
si je fais ce que tu m'as proposée, je ne retrouve pas le 5
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 >> T=max(z)/2 T = 31.3500
merci![]()
La définition de l'hélice n'est pas correcte :
Pour déterminer la pente, étudie le graphique suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 t = 0:0.03:4*pi; x = 20*cos(2*pi*t); y = 20*sin(2*pi*t); z = 5*(t);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 figure plot(z,y) xlabel('z'); ylabel('y'); axis equal
Bonsoir et merci pour votre réponse,
Comment peut-on extraire la pente à partir d'une sinusoïde?
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 figure plot(z,y) xlabel('z'); ylabel('y'); axis equal
Tu peux déterminer la longueur d'une spire en déterminant la période (ou demi-période) de la sinusoide. Pour cela il "suffit" d'analyser les changement de signe le long de la courbe.
Une fois que tu connais la longueur d'une spire, tu peux trouver le pas : http://fr.wikipedia.org/wiki/H%C3%A9...m%C3%A9trie%29
Bonjour et merci pour ta réponse
J'ai suivi ton conseil mais la valeur retrouvée ne correspond pas à la pente:
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 clc clear R=20; t = 0:0.03:4*pi; x = R*cos(2*pi*t); y = R*sin(2*pi*t); z = 5*(t); figure plot(z,y) xlabel('z'); ylabel('y'); axis equal [pks,locs] = findpeaks(y); for i=1:length(locs)-1 a(i)=z(locs(i+1))-z(locs(i)); end l=mean(a); p=sqrt(4*pi*pi*((l^2/4*pi*pi)-R*R))![]()
Essaie ceci :
C'est juste une idée. Il faudrait en améliorer la robustesse avant de l'utiliser vraiment.
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=20; t = 0:0.001:4*pi; x = R*cos(2*pi*t); y = R*sin(2*pi*t); z = 5*t; % idx = strfind(sign(y),[1 -1]); [pks,idx] = findpeaks(y); xsp = x(idx(1):idx(2)); ysp = y(idx(1):idx(2)); zsp = z(idx(1):idx(2)); p = sqrt((xsp(end)-xsp(1))^2+(ysp(end)-ysp(1))^2+(zsp(end)-zsp(1))^2) % ou l = sum(sqrt((xsp(end:-1:2)-xsp(end-1:-1:1)).^2+(ysp(end:-1:2)-ysp(end-1:-1:1)).^2+(zsp(end:-1:2)-zsp(end-1:-1:1)).^2)); p = sqrt((l)^2-4*pi^2*R^2) figure plot(z,y,'b-',zsp,ysp,'go',z(idx),y(idx),'r*') xlabel('z'); ylabel('y'); axis equal
Bravo !!
Je galère depuis des jours pour calculer la pente et ça parait tellement simple pour toi....Mille mercis
Avant de l'utiliser j'aimerais bien le comprendre, tu es entrain de calculer la distance entre deux points d'une spire c'est ça? comment as-tu fait pour savoir que c'est ta pente?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 p = sqrt((xsp(end)-xsp(1))^2+(ysp(end)-ysp(1))^2+(zsp(end)-zsp(1))^2)
Comment puis-je calculer l'erreur de cette méthode?Il faudrait en améliorer la robustesse avant de l'utiliser vraiment
Je te remercie beaucoup![]()
Deux points extrêmes sur une spire, oui
Ce n'est pas la pente mais le pas. Pour obtenir la pente, il suffit d'appliquer le théorème de Pythagore avec la longueur de la spire comme hypoténuse et le pas comme coté opposé.
Je calculerais les valeurs pour plusieurs spires.
Je ferais ensuite une moyenne et un écart type
Bonsoir,
J'étais très contente en exécutant le code que tu m'as donnée au point d'avoir oublié ce que je cherchais
J'essaie de retrouver le pas P directement du plot de l'hélice car je ne suis pas sensée connaitre l'équation paramétrique qui a permis de la générer et malheureusement dans le code x,y,z sont utilisés![]()
Il suffit de réfléchir un peu et surtout de penser à réordonner les points le long de l'hélice :
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 XYZ = xlsread('helix.xlsx'); x = XYZ(:,1); y = XYZ(:,2); z = XYZ(:,3); [z,idx] = sort(z); x = x(idx); y = y(idx); idx = strfind(sign(y).',[1 -1]); xsp = x(idx(1):idx(2)); ysp = y(idx(1):idx(2)); zsp = z(idx(1):idx(2)); figure plot(z,y,'bd',zsp,ysp,'go',z(idx),y(idx),'r*') xlabel('z'); ylabel('y'); axis equal
Merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
Afin de calculer la pente, je dois calculer la longueur d'une période de la sinusoide, est-ce que ça revient à calculer la distance entre les différents points puis faire une addition à la fin?
merci encore![]()
Partager