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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331
| function choix_param
% Création de l'objet Figure %
fig = figure('units', 'pixels', ...
'position', [520 80 700 600], ...
'name', 'Entrée des données de base');
% Creation texte statique %
handles(1) = uicontrol('style','text',...
'units','normalized','foregroundcolor','blue','backgroundcolor','green',...
'position',[0.12 0.9 0.25 0.05],...
'string','Coordonnée en x du centre de pivotement',...
'tag','Ox_text');
handles(2) = uicontrol('style','text',...
'units','normalized',...
'position',[0.12 0.84 0.25 0.05],'backgroundcolor','green',...
'string','Coordonnée en y du centre de pivotement','foregroundcolor','blue',...
'tag','Oy_text');
handles(3) = uicontrol('style','text',...
'units','normalized',...
'position',[0.12 0.78 0.25 0.05],'backgroundcolor','green',...
'string','R1_Rayon du rouleau de la trompe','foregroundcolor','blue',...
'tag','R1_text');
handles(4) = uicontrol('style','text',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.72 0.25 0.05],...
'string','R2_Rayon du rouleau du bain','foregroundcolor','blue',...
'tag','R2_text');
handles(5) = uicontrol('style','text','foregroundcolor','blue',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.66 0.25 0.05],'foregroundcolor','blue',...
'string','Distance O à A',...
'tag','OA_text');
handles(6) = uicontrol('style','text',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.60 0.25 0.05],'foregroundcolor','blue',...
'string','Distance O à B',...
'tag','OB_text');
handles(7) = uicontrol('style','text',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.54 0.25 0.05],'foregroundcolor','blue',...
'string','Angle alpha',...
'tag','alpha_text');
handles(8) = uicontrol('style','text',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.48 0.25 0.05],'foregroundcolor','blue',...
'string','Angle beta',...
'tag','beta_text');
handles(9) = uicontrol('style','text',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.42 0.25 0.05],'foregroundcolor','blue',...
'string','Coordonnée en x du centre du rouleau de bain',...
'tag','Qx_text');
handles(10) = uicontrol('style','text',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.36 0.25 0.05],'foregroundcolor','blue',...
'string','Coordonnée en y du centre du rouleau du four',...
'tag','Sy_text');
handles(12) = uicontrol('style','text',...
'units','normalized','backgroundcolor','green',...
'position',[0.12 0.30 0.25 0.05],'foregroundcolor','blue',...
'string','R3_Rayon du rouleau du four',...
'tag','R3_text');
% Creation blocs texte editable %
handles(13) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.9 0.25 0.05],...
'string','3627.05463494','tag','Ox');
handles(14) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.84 0.25 0.05],...
'string','4564.74780585','tag','Oy');
handles(15) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.78 0.25 0.05],...
'string','75','tag','R1');
handles(16) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.72 0.25 0.05],...
'string','400','tag','R2');
handles(17) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.66 0.25 0.05],...
'string','1291.57764242','tag','OA');
handles(18) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.60 0.25 0.05],...
'string','4051.91769406','tag','OB');
handles(19) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.54 0.25 0.05],...
'string','59.18584086','tag','alpha');
handles(20) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.48 0.25 0.05],...
'string','56.77760471','tag','beta');
handles(21) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.42 0.25 0.05],...
'string','7081','tag','Qx');
handles(22) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.36 0.25 0.05],...
'string','9040','tag','Sy');
handles(23) = uicontrol('style','edit',...
'units','normalized',...
'position',[0.4 0.30 0.25 0.05],...
'string','600','tag','R3');
% Creation pushbutton %
bp1 = uicontrol('style', 'pushbutton', ...
'units', 'pixels',...
'position',[500 300 100 20], ...
'string','Lancer le calcul','callback', @bouton);
% Creation pushbutton %
bp2 = uicontrol('style', 'pushbutton', ...
'units', 'pixels',...
'position',[500 400 100 20], ...
'string','Aide Schéma','callback', @schema);
% Stockage des identifiants utiles %
handles = guihandles(fig);
guidata(fig,handles)
function schema(obj,eventdata, handles)
image = imread('aide.bmp');
figure; imshow(image);%permet d'afficher le dessin d'aide
function bouton(obj,eventdata, handles)
global Ox Oy R2 R1 R3 A alpha beta Sy Qx
% Fonction associée au Callback de l'objet Pushbutton
% obj : identifiant de l'objet Pushbutton
% event : événement liés à l'objet Pushbutton
% Récupération des identifiants utiles %
fig = get(obj,'parent');
handles = guidata(fig);
Ox = str2double(get(handles.Ox,'string'));%%Récupère la valeur affichée dans l'edit et donc écrase la valeur précédente
setappdata(0,'Ox',Ox);%%Stocke la valeur dans la donnée carburant
Ox = getappdata(0,'Ox')
%Coordonnées en x du centre de pivotement de la trompe
Oy = str2double(get(handles.Oy,'string'));
setappdata(0,'Oy',Oy);
%Coordonnées en y du centre de pivotement de la trompe
Sy = str2double(get(handles.Sy,'string'));
setappdata(0,'Sy',Sy);
%Coordonnées en y du centre du rouleau de sortie du four (avant la
%trompe)
R1 = str2double(get(handles.R1,'string'));
setappdata(0,'R1',R1);
% Rayon du rouleau dans la trompe
R2 = str2double(get(handles.R2,'string'));
setappdata(0,'R2',R2);
% Rayon du rouleau de bain
R3 = str2double(get(handles.R3,'string'));
setappdata(0,'R3',R3);
% Rayon du rouleau de bain
OA = str2double(get(handles.OA,'string'));
setappdata(0,'OA',OA);
%distance entre le centre de pivotement de la trompe et le centre du rouleau de la trompe;
OB = str2double(get(handles.OB,'string'));
setappdata(0,'OB',OB);
%distance entre le centre de pivotement et le point du sabot où la bande doit passer
alpha = str2double(get(handles.alpha,'string'));
setappdata(0,'alpha',alpha);
% alpha = angle entre l'horizontal et la droite qui va de centre de pivotement de la trompe et le centre du rouleau de la trompe
beta = str2double(get(handles.beta,'string'));
setappdata(0,'beta',beta);
% beta = angle entre l'horizontal et la droite qui va du centre de pivotement de la trompe et le point du sabot où on veut que la bande passe
Qx = str2double(get(handles.Qx,'string'));
setappdata(0,'Qx',Qx);
%Coordonnée en x du centre du rouleau de fond
% [filename pathname]=uigetfile({'*.jpg';'*.bmp';'*.IMA'},'File Selector','MultiSelect','on');
%Programme pour trouver l'angle d'inclinaison de la trompe pour que la bande passe
%exactement à l'endroit voulu du sabot
%Il permet également de trouver la distance d'appui de le bande sur le
%rouleau.
%Le repère x/y est former de la verticale qui passe par le centre du
%dernier rouleau du four et par l'horizontal qui passe par le centre du
%rouleau de bain.
angle = alpha;
while alpha<0
y1 = 0;
Sx = 0;
anglepivotement = alpha*pi()/180
x0 = Ox + OA*cos(anglepivotement);
y0 = Oy + OA*sin(anglepivotement);
AO = ((x0-Qx)^2 + (y0-y1)^2);
r1 = sqrt (AO-(R1^2));
%on utilise le principe que la tangente partant
%d'un point à un cercle forme un triangle droit. On calcule donc la
%longueur du point au centre du cercle et on connait le rayon du cercle.
%Après on utilise pythagore pour connaitre la longueur de l'hypothènuse
N = (r1^2-R1^2-Qx^2+x0^2-y1^2+y0^2)/(2*(y0-y1));
A = (((x0-Qx)/(y0-y1))^2)+1;
B = (2*y0*((x0-Qx)/(y0-y1)))-2*N*((x0-Qx)/(y0-y1))-2*x0;
C = x0^2+y0^2+N^2-R1^2-2*y0*N;
%on cherche les points d'intersections du cercle que forme le rouleau et le
%cercle de longeur r1 de centre Qx
delta = sqrt((B^2)-(4*A*C));
solx1 = (-B+delta)/(2*A);
solx2 = (-B-delta)/(2*A);
soly1 = sqrt( N^2 + ((solx1^2)*((x0-Qx)/(y0-y1))^2)-2*N*solx1*((x0-Qx)/(y0-y1)));
soly2 = sqrt( N^2 + ((solx2^2)*((x0-Qx)/(y0-y1))^2)-2*N*solx2*((x0-Qx)/(y0-y1)));
%permet de touver les coordonnées des points des deux tangentes possible au
%rouleau de la trompe
x2 = solx1
y2 = soly1
%On sélectionne la bonne tangente
BO = (Qx-solx1)^2 + (y1-soly1)^2;
r3 = sqrt (BO-(R2^2));
%On utilise le même principe qu'avant avec le triangle de pythagore
N1 = (r3^2-R2^2-x2^2+Qx^2-y2^2+y1^2)/(2*(y1-y2));
A1 = (((Qx-x2)/(y1-y2))^2)+1;
B1 = (2*y1*((Qx-x2)/(y1-y2)))-2*N1*((Qx-x2)/(y1-y2))-2*Qx;
C1 = Qx^2+y1^2+N1^2-R2^2-2*y1*N1;
delta1 = sqrt(B1^2-(4*A1*C1));
solx3 = (-B1+delta1)/(2*A1);
solx4 = (-B1-delta1)/(2*A1);
soly3 = sqrt( N1^2 + ((solx3^2)*((Qx-x2)/(y1-y2))^2)-2*N1*solx3*((Qx-x2)/(y1-y2)));
soly4 = sqrt( N1^2 + ((solx4^2)*((Qx-x2)/(y1-y2))^2)-2*N1*solx4*((Qx-x2)/(y1-y2)));
%j'ai trouvé le point de tangence entre la droite qui va du point de
%pivotement au rouleau de trompe
% SO= (solx4-Sx)^2+(-soly4 -Sy)^2;
% r4= sqrt(SO-(R3^2));
%
%
% N2 = (r4^2-R3^2-solx4^2+Sx^2-(-soly4^2)+Sy^2)/(2*(Sy-(-soly4)));
% A2 = (((Sx-solx4)/(Sy-(-soly4)))^2)+1;
% B2 = (2*Sy*((Sx-solx4)/(Sy-(-soly4))))-2*N2*((Sx-solx4)/(Sy-(-soly4)))-2*Sx;
% C2 = Sx^2+Sy^2+N2^2-R3^2-2*Sy*N2;
% %On cherche les points d'intersections des deux cercles
%
% delta3 = sqrt(B2^2-(4*A2*C2));
% solx5 = (-B2+delta3)/(2*A2)
% solx6 = (-B2-delta3)/(2*A2);
%
% soly5 = sqrt( N2^2 + ((solx5^2)*((Sx-solx4)/(Sy-(-soly4)))^2)-2*N2*solx5*((Sx-solx4)/(Sy-(-soly4))))
% soly6 = sqrt( N2^2 + ((solx6^2)*((Sx-solx4)/(Sy-(-soly4)))^2)-2*N2*solx6*((Sx-solx4)/(Sy-(-soly4))));
% m = (soly5-(-soly4))/(solx5-solx4);
% n = soly5 - (m* solx5);
%On trouve l'équation de la droite tangente au rouleau de sortie du four et
%du rouleau de bain
% xyz = (abs(m*solx1-soly1+n))/(sqrt(m^2+1))
%On trouve la distance entre le point de tangence au rouleau de tromp et la
%droite qui va du rouleau de four au rouleau de bain
a = (-soly4-soly1)/(solx4-solx1);
b = -soly4 - (a*solx4);
% On cherche l'équation de la droite tangente au rouleau de trompe et au
% rouleau de bain
delta2 = sqrt(((-2*Ox-2*Oy*a+2*a*b)^2)-(4*(1+a^2)*(Ox^2+(b-Oy)^2-OB^2)));
x31 = ((2*Ox+2*Oy*a-2*a*b)+delta2)/(2*(1+a^2));
x32 = ((2*Ox+2*Oy*a-2*a*b)-delta2)/(2*(1+a^2));
Y31 = a*x31+b;
Y32 = a*x32+b;
% On trouve l'intersection entre la tangente des deux rouleaux et le
% cercle du point du sabot
anglesabot = beta*pi()/180;
a1 = tan(anglesabot);
b1 = Oy-(a1*Ox);
delta3 = sqrt(((-2*Ox-2*Oy*a1+2*a1*b1)^2)-(4*(1+a1^2)*(Ox^2+(b1-Oy)^2-OB^2)));
x41 = ((2*Ox+2*Oy*a1-2*a1*b1)+delta3)/(2*(1+a1^2));
x42 = ((2*Ox+2*Oy*a1-2*a1*b1)-delta3)/(2*(1+a1^2));
Y41 = a1*x41+b1;
Y42 = a1*x42+b1;
%On trouve les coordonnées du point du sabot
z = x31-x41
y = Y31-Y41
%On essaye de rapprocher les points pour qu'il coincide
if z<0.001 & y<0.001 %degrè de précision
break
end
alpha = alpha + 0.001
beta = beta + 0.001
resultatangle =alpha -beta
f = figure('Position', [250 100 400 400]);
% cnames = {'angle de déplacement[°C]','distance [mm]'};
% rnames = {''};
%
% y = dist
% d = [resultatangle];
%
% t = uitable('parent',f,'data',d, 'ColumnName',cnames,'RowName',rnames,'Position', [50 50 300 200]);
% % set(t);%affichage des résultats
end |
Partager