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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
| % On vide la mémoire
close all
clear all
clc
%% Tolerances_A_Validation.m
% Version 1 : création d'un anneau parfait puis test des distances
% orthogonales nulles
%% DONNEES
% Nombre de points nominaux des anneaux
N = 360;
% Centre de l'anneau 1
x = 1;
y = 2;
z = 1;
% Rayon max de l'anneau 1
R_max = 15;
% Rayon min de l'anneau 1
R_min = 12;
% Définition de l'anneau nominal 1
XAnneau_nom_1 = [];
YAnneau_nom_1 = [];
ZAnneau_nom_1 = [];
for VTheta = 0:(2*pi)/N:2*pi
p_1 = rand(1);
X_1 = x + (R_min + (R_max-R_min) * p_1) * cos(VTheta);
Y_1 = y * ones(size(VTheta));
Z_1 = z + (R_min + (R_max-R_min) * p_1) * sin(VTheta);
XAnneau_nom_1 = [XAnneau_nom_1 X_1];
YAnneau_nom_1 = [YAnneau_nom_1 Y_1];
ZAnneau_nom_1 = [ZAnneau_nom_1 Z_1];
end
% Définition des anneaux expérimentaux 1
Anneau_exp = [XAnneau_nom_1; YAnneau_nom_1; ZAnneau_nom_1];
%% Partie 1 : TOLERANCE A
% Résolution du plan
% Nous savons que l'équation d'un plan est de la forme : aX + bY + cZ + d = 0
% On pose aX + bY + cZ = -d
% On fixe la valeur de b
% Nous allors résoudre l'équation Y = (aX + cZ + d) / (-b)
X_1 = (Anneau_exp(1, :).');
Y_1 = (Anneau_exp(2, :).');
Z_1 = (Anneau_exp(3, :).');
b_1 = 1;
i_1 = size(X_1);
% Plan approximé
M_1 = [X_1/b_1 Z_1/b_1 ones(i_1)/b_1];
Res_1 = M_1 \ (-Y_1);
a_1 = Res_1(1); c_1 = Res_1(2) ;d_1 = Res_1(3);
% Calcul des distances orthogonales par rapport au plan
Distances_1 = zeros(size(X_1, 1), 1);
for i = 1 : i_1
Distances_1(i, 1) = (abs(a_1 * Anneau_exp(1, i) + b_1 * Anneau_exp(2, i) + ...
c_1 * Anneau_exp(3, i) + d_1) / (sqrt(a_1^2 + b_1^2 + c_1^2)));
end
%% Partie 3 : AFFICHAGE
mat2vec = @(x) x(:); % Permet de transformer une matrice en vecteur
% FIGURE 1 : points expérimentaux
% Affichage de l'anneau expérimental 1 et 2
f1 = figure;
pause(0.00001);
frame_h = get(handle(gcf),'JavaFrame');
set(frame_h,'Maximized',1);
set(f1,'name','Tolérances A','numbertitle','off')
plot3(Anneau_exp(1,:), Anneau_exp(2,:), Anneau_exp(3,:), '*b');
title('Tolérances A')
legend('Anneau expérimental');
xlabel ('X')
ylabel('Y')
zlabel ('Z')
grid on
% FIGURE 2 : plan approximé
% Nombre de points composant le plan
P_grille = 50;
% Affichage du plan de la tolérance A
f2 = figure;
pause(0.00001);
frame_h = get(handle(gcf),'JavaFrame');
set(frame_h,'Maximized',1);
set(f2,'name','Plans approximés de la tolérance A','numbertitle','off')
plot3(Anneau_exp(1,:), Anneau_exp(2,:), Anneau_exp(3,:), '*b'); hold on
[Xp_1, Zp_1] = meshgrid(-R_max + x : (2 * R_max) / P_grille : R_max + x , -R_max + z : (2 * R_max) / P_grille : R_max + z);
Yp_1 = @(Xp_1,Zp_1) (-d_1 - a_1 * Xp_1 - c_1 * Zp_1) / b_1;
plot3(Xp_1(:) ,mat2vec(Yp_1(Xp_1, Zp_1)), Zp_1(:), '.g'); hold off
title('Plan approximé de la tolérance A')
legend('Points expérimentaux', 'Plan approximé');
xlabel ('X')
ylabel('Y')
zlabel ('Z')
grid on
% FIGURE 4 : distances
% Affichage des distances de la tolérance A
f4 = figure;
pause(0.00001);
frame_h = get(handle(gcf),'JavaFrame');
set(frame_h,'Maximized',1);
set(f4,'name','Distances des tolérances A','numbertitle','off')
plot(1 : i_1, Distances_1, '.b'); hold on
plot(1 : i_1, max(Distances_1), 'r'); hold off
title('Distances orthogonales entre les points expérimentaux et le plan de la tolérance A')
legend('Distance orthogonale des points', 'Distance maximale');
xlabel('Points expérimentaux')
ylabel('Distances orthogonales')
grid on |
Partager