Bonjour,
je voudrai créer un système d'axe non linéaire, par exemple, 6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100 de telle sorte qu'entre chaque nombre il y ait la même distance ; est-ce possible avec Matlab ?
Merci
A+
Bonjour,
je voudrai créer un système d'axe non linéaire, par exemple, 6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100 de telle sorte qu'entre chaque nombre il y ait la même distance ; est-ce possible avec Matlab ?
Merci
A+
Salut
J'ai pensé à ça mais ça marche pas terrible...
A revoir ou attendre autres idées..
close all
figure;
A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100]
set(gca,'XTickLabel',A,'xlim',[A(1),A(end)])
Bonjour.
Essaie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part set(gca,'xtick',[6:2:100])
Bonjour Newenda,
j'ai essayé, ça marche mais l'axe s'arrête à 50 et j'sais nin pourquoi![]()
La bonne solution consiste à faire ceci :
Maintenant, le problème va être de positionnner correctement le tracé dans ce nouveau repère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100] figure set(gca,'xtick',1:numel(A),'xticklabel',num2str(A(:)),'xlim',[0 numel(A)+1])
En fait, il s'agit d'(appliquer la transformée entre l'espace equi-réparti linéaire x (1 2 3 4...) et l'espace défini par A (6 8 10 12 ...) :
- 1 ->2 => 6 -> 8
- 2 -> 3 => 8 -> 10
- 3 -> 4 => 10 -> 12
- ...
bon, même si j'ai pas la fin pour le moment, c'est pas trop grave mais le pire c'est que ça ne fait pas du tout ce que je souhaite :
les droites qui apparaissent sur la figure devraient être parallèles !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 close all; b=[8,10,14,18,24,31,41,55,71,92,122,160]; d=b; a=pi*d/1000; figure plot(d,a*80,d,a*106,d,a*140); set(gca,'Xticklabel',b,'Xlim',[b(1),b(end)]); set(gca,'Yticklabel',b,'Ylim',[b(1),b(end)]); grid
Hum raffraichis la page...y'a eu une réponse pas mal de Dut juste avant ...
Merci Newenda, effectivement la réponse de Dut est très intéressante ; voici ce que j'ai fait :
et ça donne...mais ce n'est pas ce qu'il faut...je vais réfléchir à la suite à faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100] d=A c=pi*d/1000 plot(d,c*63,d,c*80,d,c*100,d,c*126); set(gca,'xtick',1:numel(A),'xticklabel',num2str(A(:)),'xlim',[0 numel(A)+1]); set(gca,'ytick',1:numel(A),'yticklabel',num2str(A(:)),'ylim',[0 numel(A)+1]); grid;
Il suffit de faire une interpolation linéaire de chaque valeur entre chaque intervalle.
Voici une petite fonction vite faite et non optimisée :
A utiliser comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 function newX = lin2dis(X,A) for n = 1:numel(X) idx = find(X(n)>=A,1,'last'); if idx < numel(A) newX(n) = idx+(X(n)-A(idx))/(A(idx+1)-A(idx)); else newX(n) = numel(A); end end
La valeur à coté de chaque point correspond à la valeur en abscisse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 A = [6, 8, 10, 12, 16, 20, 25, 32, 40, 50, 63, 80, 100]; X = round(rand(1,25)*94)+6; newX = lin2dis(X,A); figure newY = rand(1,numel(newX)); plot(newX,newY,'r*'); text(newX,newY,num2str(X(:))) set(gca,'xtick',1:numel(A),'xticklabel',num2str(A(:)),'xlim',[0 numel(A)+1])
L'idée est très simple et le code ci-dessus peut être grandement optimisé pour plus de flexibilité![]()
merci Dut de ta réponse ; je vais étudier le truc...
Il est grandement temps que je me présente un peu et tu comprendras mieux ce que je veux faire.
Je ne suis pas un grand informaticien devant l'éternel, loin s'en fautdonc je ne suis pas trop familiarisé avec les lignes de codes ; si j'ai posé une question ici, c'est que je pense être sur le bon forum et vos réponses le prouvent ; bon, j'en viens au problème complet.
En usinage sur tour ou sur fraiseuse on utilise des conditions de coupe qui sont fonction d'une vitesse de coupe - appelé Vc - qui est une donnée de matériau, c'est à dire que ça dépend si c'est de l'acier ou de l'aluminium, par exemple. Et on a une relation très simple qui lie la vitesse de rotation du tour au diamètre à usiner en fonction de cette vitesse de coupe :
Vc=pi*diamètre*Nt/1000 (le facteur 1000 vient simplement du fait que la Vc s'exprime en m/mn et le diamètre D en méca plutôt en mm) Nt, c'est le nombre de tour par minute sur lequel on doit se régler (en général, ces valeurs sont discrètes sur une machine conventionnelle et dépendent du nombre de vitesses de la boite 12 ou 15, par exemple). On peut alors tracer Vc fonction de D pour une valeur de Nt donnée, c'est évidemment une droite toute bête ; si on le fait pour n valeurs, on a n droites de pente Nt, donc non parallèles ; or dans tous les bouquins de méca on trouve des abaques où les droites sont parallèles parce qu'on prend des axes gradués comme la variation des vitesses disponibles sur la machine. Ce que je souhaite faire, c'est pouvoir tracer cet abaque à partir d'un programme dans lequel on rentrerait juste les valeurs disponibles de vitesse de machine. Si je réussis, je pense que je mettrai ça à disposition des copains mécanos...voilà, voilà.
A+
et merci pour votre aide
Partager