Carreaux de COONS sous MATLAB

 » Carreaux de COONS avec MATLAB »

image1

Utilisation de l’interface graphique pour la création de carreaux de  » COONS « , et le raccordement de carreaux

Programmation de l’interface

image4

L’installation :

Tout díabord il faut copier les fichiers sous un même répertoire, ensuite lancer MATLAB sous ce répertoire, puis taper ëdepartí.

Premier pas :

image2

 

On commence par créer des carreaux, on choisit donc l’option Creation de CARREAU de COONS.

 

image3

La première étape consiste à placer les points A,B,C et D. On clique donc sur le bouton « Placer A,B,C,D ».

Grâce au système de placement des points, il est possible de placer les quatre points níimporte où (sous réserve díavoir une bonne vue dans l’espace).

Remarque : au démarrage les points A,B,C et D, n’apparaissent pas sur les différents plans, pour les voir apparaître il faut cliquer sur le point voulu dans la rubrique ëAffichageí.

Il suffit de choisir dans quel plan on souhaite placer un point, on clique sur le point choisit ( A , par exemple ) et on se reporte dans le plan considéré pour y positionner le point. Par exemple on peut placer les points comme ceci :

image5

image6

Le programme connaît quelque défaut, comme celui de ne pas permettre a líutilisateur de se tromper. Par exemple, si vous voulez placer A dans le plan (X,Y), et que vous le placiez dans le plan (X,Z) par inattention, le point va sortir du cadre et ne sera plus visible. Pour récupérer cette erreur, il suffit de replacer le point dans le bon plan et de sortir (Cliquer sur « Stop ! ») puis ré-entrer.

Une fois les points placés, il suffit de sortir en cliquant sur « Stop ! », les points sont alors automatiquement sauvegardés.

La deuxième étape consiste à faire ce que j’appellerai le squelette du carreau, en d’autres termes à tracer les courbes limites du carreau . Pour cela il suffit de cliquer sur « A,B » si l’on veut dessiner la courbe entre A et B.

image3

 

Cíest toujours le même principe, on choisit dans quel plan on veut placer P1,P2,P3,P4, puis ensuite on affiche la courbe de Bézier obtenue en cliquant sur « Bezier ».

Pour sortir il suffit de cliquer sur « Stop ! » et les modifications seront enregistrées.

Par exemple :

Entre A et B :

image7

Entre A et D :

image8

 

Entre B et C :

image9

Entre C et D :

image10

 

La troisième étape

 permet de faire des modifications, soit de changer les points A,B,C ou D, après avoir tracé les courbes . Il níy a pas vraiment díordre on peut commencer par tracer les courbes limites puis placer les points A,B,C et D.

Il est possible grâce aux barres de défilement ëAZIMUTí et ëELEVATIONí de faire pivoter le squelette , pour le voir sous tous les angles.

Par exemple : AZIMUT : 45∞ et ELEVATION : 45∞

image11

Le même squelette avec ELEVATION : -30∞ et AZIMUT : 40.

image12

La quatrième étape permet le

réglage de la torsioní, pour cela on appuie sur ëCOONSí.

On obtient un premier résultat , un carreau de COONS avec pour limite le squelette mais sans aucune torsion. Avec le squelette précèdent on obtient le carreau suivant :

image13

Il est possible de changer la définition ( le nombre de point ) en activant la troisième barre de défilement.

image14

image15

Et comme précédemment, il est possible de faire varier líAZIMUT et líELEVATION :

Il y a en plus 3 autres boutons, qui permettent de faire les projections sur différents plans :

Par exemple « ProjXY » : on obtient une projection sur le plan (X,Y) :

image16

Donc pour régler la torsion, il suffit de cliquer sur « Torsion A », « Torsion B », « Torsion C » ou encore « Torsion D », suivant le point auquel on veut régler la torsion.

Par exemple on clique sur « Torsion A », et je vais prendre le carreau de base :

image17

Les trois cases indiquent respectivement la torsion en X au point A, puis la torsion en Y au point A, et dernièrement la torsion en Z en A.

Pour sortir, il suffit de taper « Stop ! » et toutes les modifications seront prises en compte.

Pour l’affichage, il suffit de taper sur ëVue !í, même au départ (líaffichage níest pas automatique)

Je vais d’abord augmenter la torsion en X (de A):

image18

La torsion níest visible que dans le plan (X,Y) ; si jíavais diminué X, on aurait vu :

image19

Ensuite je vais augmenter la torsion en Y :

image20

 

On observe que la torsion níest visible que dans le plan (X,Y) , en diminuant la torsion en Y on obtient:

 

image21

En dernièrement en augmentant la torsion en Z, on observe :

image22

Et en diminuant la torsion en Y :

image24 image25

Une fois le carreau terminé, ou bien a tout moment il est possible de sauvegarder le carreau de COONS fait. Il suffit de taper le nom sous lequel on veut l’enregistrer et d’appuyer sur le bouton « Enreg. »

image26

Il est aussi possible de ëChargerí un carreau déjà enregistré et díimprimer au format  » .ps  » un carreau de COONS.

A tout moment il est possible de revenir au premier menu, en tapant ëStop !í, et de modifier les points ou bien les courbes limites sans perdre les données.

Les raccordements

Apres avoir fait (et enregistrer) quelques carreaux de COONS, il est possible de les raccorder. Pour cela on revient a la fenêtre de départ et on choisit le bouton Raccordement (C0,C1,C2) de Carreau de COONSí .

La première étape

consiste à charger le carreau central, celui sur lequel on raccordera les carreaux , on tape le nom (en face de « Charger A ») puis on appuie sur le bouton et on voit alors apparaître le carreau à droite ( sinon cela veut dire que le carreau n’existe pas !)

image27

 

On a toujours les deux barres de défilements ëElevationí et ëAzimutí , ainsi que le bouton ëStop !í qui permet de retourner au menu de départ.

Le bouton « Interpolation » permet díinterpoler le carreau principal grâce au Spline :

  • points de contrôle
  • vecteurs nodaux.

( il faut fermer la fenêtre qui apparaît manuellement )

image28

 

Le bouton « bsurf » trace la Spline a partir des résultats obtenues par le biais de l’interpolation.

(il faut aussi fermer la fenêtre manuellement)

image29

La deuxième étape

consiste à charger les carreaux de raccordement (B,C,D,E), par défaut on a un raccordement C0 le programme le carreau à la position souhaitée, il níest pas nécessaire que le coté de raccordement ait une même courbe limite. (On notera les quatre points du carreau central : a,b,c,d)

Charger B (e,f,g,h) : le coté [g,h] du carreau se fixe sur [a,b], par translation de [g,h] sur [a,b].

Charger C (i,j,k,l) : le coté [i,l] du carreau se fixe sur [b,c], par translation de [i,l] sur [b,c].

 

Charger D (m,n,o,p) : le coté [m,n] du carreau se fixe sur [c,d], par translation de [m,n] sur [c,d].

Charger E (q,r,s,t) : le coté [r,s] du carreau se fixe sur [a,d], par translation de [r,s] sur [a,d].

 

 

Il níest pas nécessaire que les coordonnées de a et b soient les même que g et h, étant donné que le programme procède par translation. Sur líexemple si dessus, jíai chargé cinq fois le même

Carreau ( les quatre courbes limites de ce carreau étant différentes ).

Le bouton ëplein ecraní permet une vue plein écran. (il faut refermer la fenêtre manuellement ).

image30image31

Les boutons « C1 » et « C2 » permettent de faire un raccordement C1 ou C2.Par exemple , un raccordement C0.

image32

Avec un raccordement C1 on obtiendrai :

image33

Et un raccordement C2, donnerait :

image34

Remarques générales :

 

Pour une bonne utilisation de líinterface, il ne faut pas passer díune fenêtre à líautre et toujours sortir avec ëStop !í pour que les modification soient prises en compte.

Dans les cas des boutons íInterpolationí, ëBsurfí et ëPlein Ecraní il faut fermer la fenêtre manuellement avant de revenir à la fenêtre précédente.

Quelques exemples :

 

image35

 

Voici la figure nommée « parachute ».

Le raccordement C0 de 4 figure ëparachuteí sur une figure « parachute »:

image36

La même figure avec 4 raccordements C1 :

image36

Et maintenant avec un raccordement C2 :

image37

image38

image39

image39 image40 image41

Programmation sous Matlab

 

Bezier3.m
 

function [Sortie1,Sortie2,Sortie3]=bezier3(Ptsx,Ptsy,Ptsz);
%nbre est la discretisation choisie
nbre=100
n=length(Ptsx)-1
for l=1:nbre+1
t(l)=(l-1)/nbre;
for i=1:n+1
Px(1,i)=Ptsx(i);
Py(1,i)=Ptsy(i);
Pz(1,i)=Ptsz(i);
end;
 
for k=2:n+1
for i=k:n+1
Px(k,i)=(1-t(l))*Px(k-1,i-1)+t(l)*Px(k-1,i);
Py(k,i)=(1-t(l))*Py(k-1,i-1)+t(l)*Py(k-1,i);
Pz(k,i)=(1-t(l))*Pz(k-1,i-1)+t(l)*Pz(k-1,i);
end;
end;
 
Ptx(l)=Px(n+1,n+1);
Pty(l)=Py(n+1,n+1);
Ptz(l)=Pz(n+1,n+1);
 
end;
 
Sortie1=Ptx;
Sortie2=Pty;
Sortie3=Ptz;
Bsurf.m
 
function [X,Y,Z]=bsurf(x,y,z,U,V,K,L);
 
% Fonction donnant l'ensemble des points Qkl (points de
 la Surface Spline)
% a partir des Pij (points du polyedre de controle)
% et du choix des degres m1 et m2 des B-Splines...
% x,y,z: matrices (n1+1)*(n2+1) des coordonnees des points
 Pij
% U,V: vecteurs nodaux resp.associes aux parametres u,v
% K,L: entiers tels que k=0...K-1 et l=0...L-1
 
n1=size(x,1)-1;
n2=size(x,2)-1;
m1=length(U)-n1-1;
m2=length(V)-n2-1;
 
for ctr1=0:n1
vect1=[x(ctr1+1,:);y(ctr1+1,:);z(ctr1+1,:)];
s=spmak(V,vect1);
 
Vd=V(1);
 
Vf=V(length(V));
 
vs=fnval(s,[Vd:(Vf-Vd)/(L-1):Vf]);
X1(ctr1+1,:)=vs(1,:); 
Y1(ctr1+1,:)=vs(2,:);
Z1(ctr1+1,:)=vs(3,:);
 
end;
 
for ctr2 = 0:L-1
vect2=[X1(:,ctr2+1)';Y1(:,ctr2+1)';Z1(:,ctr2+1)'];
s2=spmak(U,vect2);
 
Ud=U(1);
Uf=U(length(U));
us=fnval(s2,[Ud:(Uf-Ud)/(K-1):Uf]);
 
X2(ctr2+1,:)=us(1,:);
Y2(ctr2+1,:)=us(2,:);
Z2(ctr2+1,:)=us(3,:);
 
end;
X=X2';
Y=Y2';
Z=Z2';
Coons.m
function [Sortie1,Sortie2,Sortie3] = COONS(k,Bx,By,Bz);
%Pour un carreau de TYPE H.
%Cette fonction permet de dessiner un carreau de coons
%a partir des matrices Bx,By,Bz et de deltainv (qui est
%le nombre de pas).
format long
delta = 1/k;
%Les matrices constantes
M=[ -6 6 -3 -3 -0.5 0.5;
15 -15 8 7 1.5 -1;
-10 10 -6 -4 -1.5 0.5;
0 0 0 0 0.5 0;
0 0 1 0 0 0;
1 0 0 0 0 0];
N=[ 120 0 0 0 0 0;
-240 24 0 0 0 0;
150 -36 6 0 0 0;
-30 14 -6 2 0 0;
1 -1 1 -1 1 0;
0 0 0 0 0 1];
L=[1 0 0 0 0 0;
1 1 0 0 0 0;
1 1 1 0 0 0;
1 1 1 1 0 0;
1 1 1 1 1 0;
1 1 1 1 1 1];
I=[0 0 0 0 0 1];
D=[delta^5 0 0 0 0 0;
0 delta^4 0 0 0 0;
0 0 delta^3 0 0 0;
0 0 0 delta^2 0 0;
0 0 0 0 delta 0;
0 0 0 0 0 1];
SxOO=N*D*M*Bx*M'*D'*N';
SyOO=N*D*M*By*M'*D'*N';
SzOO=N*D*M*Bz*M'*D'*N';
%Algorithme de calcul des differences :
Tmpl=inv(L);
Tmpj=inv(L');
for l = 1:k+1
Tmpl=Tmpl*L;
for j = 1:k+1
Tmpj=Tmpj*L';
Px(l,j)=I*Tmpl*SxOO*Tmpj*I';
Py(l,j)=I*Tmpl*SyOO*Tmpj*I';
Pz(l,j)=I*Tmpl*SzOO*Tmpj*I';
end;
Tmpj=inv(L');
end;
Sortie1=Px;
Sortie2=Py;
Sortie3=Pz;
Depart.m
% ******************************************
% * *
% * Programmme compile avec MATLAB 4 *
% * (sous windows) et MATLAB 5 ( sous *
% * unix ). *
% * *
% ******************************************
% * *
% * Declaration : depart *
% * *
% ******************************************
% * *
% * Vesion : 16.06.99 *
% * *
% * *
% ******************************************
% * *
% * ARIAS Frederic : MIM2 *
% * *
% * Projet du MIM10 : Carreaux de COONS *
% * *
% ******************************************
% * *
% * Mise en garde : il est fortement *
% * conseiller de ne pas sauter de fenetre*
% * en fenetre *
% * *
%***************************************************
%* *
%* Ce programme fait appel aux *
%* sous-programme : *
%* *
%* fenetre *
%* index -> plan (2) -> bezier3 *
%* plan1 (2) -> bezier3 *
%* plan2 (2) -> bezier3 *
%* plan3 (2) -> bezier3 *
%* plan4 (2) -> bezier3 *
%* plan5 (2) -> bezier3 *
%* vue3d (2) -> coons *
%* -> torsiona (2) *
%* -> torsionb (2) *
%* -> torsionc (2) *
%* -> torsiond (2) *
%* index2 -> inter -> nenx *
%* -> matrice *
%* -> bsurf -> fnval(1) -> spval(1) *
%* -> ppual(1) *
%* -> spmak(1) *
%* -> coons *
%* vision (en cours) *
%* *
%***************************************************
% (1) : programme non implemente par mes soins ;-)
% (2) : programme TOTALEMENT dependant de index
%
% ETAPE 0 : On explique et on demarre
% REMARQUE :
% 1 : Vous allez vous appercevoir que certaines variables
 contiennent
% les memes renseignements, ce n'est pas une erreur de
 l'utilisateur
% mais cela est destiné :
% - soit a facilite la comprehension du lecteur,
% - soit a facilite la comprehension pour MATLAB.
%
% 2 : Certains aspects techniques sur la creation de fonction
% comme coons, bezier, nenx, bsurf, ne seront pas expliquer
% dans les commentaires.
%
% 3 : Pouquoi une interface graphique ?
% a - Pour exploiter toutes les possibilitées de
 MATLAB.
% b - Pour une creation de carreaux de coons plus RAPIDE
% et plus INTUITIVE.
%
%Definition des quatres points du carreaux:
%
% A = P(0,0) = [X(1) Y(1) Z(1)] = [X(5) Y(5) Z(5)]
% ( remarque : on note P(0,0) un point de l'espace x,y,z
 )
% ( P(0,0) est en fait un vecteur [x y z] )
% B = P(1,0) = [X(2) Y(2) Z(2)]
%
% C = P(1,1) = [X(3) Y(3) Z(3)]
%
% D = P(0,1) = [X(4) Y(4) Z(4)]
%
%Avec pour convention:
%
% B=[ P(0,0) P(0,1) dP(0,0)/du dP(0,1)/du ]
% [ P(1,0) P(1,1) dP(1,0)/du dP(1,1)/du ]
% [dP(0,0)/dw dP(0,1)/dw d^2P(0,0)/dwdu d^2P(0,1)/dwdu
 ] ]
% [dP(1,0)/dw dP(1,1)/dw d^2P(1,0)/dwdu d^2P(1,1)/dwdu
 ] ]
%
% B est en fait une matrice 4*4*3 !
%
% On notera donc B = [ Bx By Bz]
% avec Bx,By,Bz:4x4
%
%Cette fonction redefinie le standard d'une fenetre
%ce n'est pas tres technique mais peu interessant
%donc je ne m'etalerais pas...
%C'est domage de ne pas utiliser les avantage d'une 17
 pouce !
clear all;
screen = get(0, 'ScreenSize');
width = screen(3);
height = screen(4);
if height >= 600
mwwidth = 400; mwheight = 150;
else
mwwidth = 400; mwheight = 150;
end
left = (width-mwwidth)/2;
bottom = height-mwheight-60;
rect = [ left bottom mwwidth mwheight ];
set(0, 'defaultfigureposition',rect);
figure(1)
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 100 400 50],... % position du bouton
'string', 'Creation de CARREAU de COONS de TYPE H', ...
 % texte du bouton
'callback', [...
'close(1);'...
'index;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 50 400 50],... % position du bouton
'string', 'Raccordement (C0,C1,C2) de CARREAU de COONS',
 ... % texte du bouton
'callback', [...
'close(1);'...
'index2;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 0 400 50],... % position du bouton
'string', 'Sortir du programme', ... % texte du bouton
'callback', [...
'close(1);'...
]); % fonction, script à appeler ou
% commande à exécuter
Fenetre.m
%Cette fonction redefinie le standard d'une fenetre
%ce n'est pas tres technique mais peu interessant
%donc je ne m'etalerais pas...
%C'est domage de ne pas utiliser les avantage d'une 17
 pouce !
screen = get(0, 'ScreenSize');
width = screen(3);
height = screen(4);
if height >= 600
mwwidth = 770; mwheight = 540;
else
mwwidth = 700; mwheight = 500;
end
left = (width-mwwidth)/2;
bottom = height-mwheight-60;
rect = [ left bottom mwwidth mwheight ];
set(0, 'defaultfigureposition',rect);
Index.m
%On efface toutes les donnees qui sont en memoires
clear all;
%On redefinie le types standart d'une fenetre
fenetre;
%ETAPE1 :On declare toutes les variables globales du programme
 principal
global numero % On numerote la premiere fenetre.
global num % On numerote la deuxieme fenetre.
global num2 % On numerote la troisieme fenetre.
global X % (**) Premiere facon de connaitre les coordonnees
global Y % des points A,B,C,D.
global Z %
global DA % (**) Premiere facon de connaitre les derivees
 aux points
global DB % A,B,C,D.
global DC %
global DD %
global DDA % (**) Premiere facon de connaitre les derivees
 seconde aux points
global DDB % A,B,C,D.
global DDC %
global DDD %
global Xuw % (**) Premiere facon de connaitre la torsion
 au quatres
global Yuw % coins.
global Zuw %
global Xu2 %
global Yu2 %
global Zu2 %
global Xw2 %
global Yw2 %
global Zw2 %
global tX % Ce sont des variables temporaires qui permette
global tY % de definir les derivees aux quatres
global tZ % coins.
global Bx % C'est la deuxieme facon de connaitre les coordonnees
global By % des points A,B,C,D ainsi que leur derivee
 et torsion
global Bz % c'est la synstese de (**)
% C'est en fait la facon dont COONS a range ses informations
% mais elle est lourde pour la creation de graphique sous
% MATLAB
global temp1 % Ceci est l'AZIMUT
global temp2 % Ceci est l'ELEVATION
% Cela permet de voir un objet sous tous les angles !
global AMin % Elevation minimum.
global AMax % Elevation maximum.
global VMin % Azimut minimum.
global VMax % Azimut maximum.
global hAsc3 % On garde en memoire la definition des barre
 de defilement
global VAsc3 % surtout si elle ne sont pas introduite
 dans la fenetre
global hVal3 % principale.
global hAsc4 %
global VAsc4 %
global hVal4 %
global hAsc5 %
global VAsc5 %
global hVal5 %
global X1 % Resultat de la fonction COONS :
global Y1 % cela permet de faire le dessin
global Z1 %
global PXZ % On garde en memoire des boutons qui ne sont
 pas
global PYZ % declare dans la fonction principale.
global PXY % ( Bouton de projection sur les axes de la
% fonction vue3d )
global nom % On garde en memoire des saisies (zones de
 textes)
global nom2 % qui ne sont pas declare dans la fonction
 principale
global nom3 % ( Saisie de charger, imprimer, enregistrer
 de la
% fonction vue3d ).
global pts % On garde en memoire le nombre de discretisation
% pour l'utilisation de la fonction coons .
global temps % Constante pour connaitre le temp de creation
global Temps % d'un carreau.
global ABX
global ABY
global ABZ
global BCX
global BCY
global BCZ
global ADX
global ADY
global ADZ
global CDX
global CDY
global CDZ
%ETAPE 2:On initialise
Temps=0; % On met le chrono à zero
temps=0; %
X=[0 0 1 1]; % C'est le carreau standard
Y=[0 1 1 0]; % A,B,C,D ne sont pas confondus
Z=[0.5 0.5 0.5 0.5]; % et forme un carre dans le plan
 Z=0.5
DA=[0 0; % On prend meme toutes les derives nulles
0 0; % plus simple tu meurt ...
0 0]; %
DB=[0 0; %
0 0; %
0 0]; %
DC=[0 0; %
0 0; %
0 0]; %
DD=[0 0; %
0 0; %
0 0]; %
DDA=[0 0; % On prend meme toutes les derives seconde nulles
0 0; % plus simple tu meurt ...
0 0]; %
DDB=[0 0; %
0 0; %
0 0]; %
DDC=[0 0; %
0 0; %
0 0]; %
DDD=[0 0; %
0 0; %
0 0]; %
Xuw=[0 0; % On continue dans la meme optique pour la creation
 du
0 0]; % carreau standart : plus simple tu ...
Yuw=[0 0; % LA TORSION NULLE !
0 0]; %
Zuw=[0 0; %
0 0]; %
tX=[0 0 0 0 0 0]; % On initialise ceci comme cela, en
 fait c'est
tY=[0 0 0 0 0 0]; % pour faire comprendre a MATLAB 4 que
 ce sont
tZ=[0 0 0 0 0 0]; % des vecteurs lignes
numero=1; % numero de la fenetre principale
num = 2; % numero de la fenetre secondaire
num2 = 3;
VMin = 0; % Azimut minimum
VMax = 180; % Azimut maximum
AMin = -90; % Elevation minimum
AMax = 90; % Elevation maximum
VInit = 45; % Standard
temp1 = 45;
temp2 = 45;
tX=[X(4) 0.2*DD(1,1)+X(4) DDD(1,1)*0.1+0.4*DD(1,1)+X(4)
 DDC(1,1)*0.1+DC(1,1)*0.4+X(3) DC(1,1)*0.2+X(3) X(3)];
tY=[Y(4) 0.2*DD(2,1)+Y(4) DDD(2,1)*0.1+0.4*DD(2,1)+Y(4)
 DDC(2,1)*0.1+DC(2,1)*0.4+Y(3) DC(2,1)*0.2+Y(3) Y(3)];
tZ=[Z(4) 0.2*DD(3,1)+Z(4) DDD(3,1)*0.1+0.4*DD(3,1)+Z(4)
 DDC(3,1)*0.1+DC(3,1)*0.4+Z(3) DC(3,1)*0.2+Z(3) Z(3)];
[CDX,CDY,CDZ]=bezier3(tX,tY,tZ);
tX=[X(2) 0.2*DB(1,2)+X(2) DDB(1,2)*0.1+0.4*DB(1,2)+X(2)
 DDC(1,2)*0.1+DC(1,2)*0.4+X(3) DC(1,2)*0.2+X(3) X(3)];
tY=[Y(2) 0.2*DB(2,2)+Y(2) DDB(2,2)*0.1+0.4*DB(2,2)+Y(2)
 DDC(2,2)*0.1+DC(2,2)*0.4+Y(3) DC(2,2)*0.2+Y(3) Y(3)];
tZ=[Z(2) 0.2*DB(3,2)+Z(2) DDB(3,2)*0.1+0.4*DB(3,2)+Z(2)
 DDC(3,2)*0.1+DC(3,2)*0.4+Z(3) DC(3,2)*0.2+Z(3) Z(3)];
[BCX,BCY,BCZ]=bezier3(tX,tY,tZ);
tX=[X(1) 0.2*DA(1,2)+X(1) DDA(1,2)*0.1+0.4*DA(1,2)+X(1)
 DDD(1,2)*0.1+DD(1,2)*0.4+X(4) DD(1,2)*0.2+X(4) X(4)];
tY=[Y(1) 0.2*DA(2,2)+Y(1) DDA(2,2)*0.1+0.4*DA(2,2)+Y(1)
 DDD(2,2)*0.1+DD(2,2)*0.4+Y(4) DD(2,2)*0.2+Y(4) Y(4)];
tZ=[Z(1) 0.2*DA(3,2)+Z(1) DDA(3,2)*0.1+0.4*DA(3,2)+Z(1)
 DDD(3,2)*0.1+DD(3,2)*0.4+Z(4) DD(3,2)*0.2+Z(4) Z(4)];
[ADX,ADY,ADZ]=bezier3(tX,tY,tZ);
tX=[X(1) 0.2*DA(1,1)+X(1) DDA(1,1)*0.1+0.4*DA(1,1)+X(1)
 DDB(1,1)*0.1+DB(1,1)*0.4+X(2) DB(1,1)*0.2+X(2) X(2)];
tY=[Y(1) 0.2*DA(2,1)+Y(1) DDA(2,1)*0.1+0.4*DA(2,1)+Y(1)
 DDB(2,1)*0.1+DB(2,1)*0.4+Y(2) DB(2,1)*0.2+Y(2) Y(2)];
tZ=[Z(1) 0.2*DA(3,1)+Z(1) DDA(3,1)*0.1+0.4*DA(3,1)+Z(1)
 DDB(3,1)*0.1+DB(3,1)*0.4+Z(2) DB(3,1)*0.2+Z(2) Z(2)];
[ABX,ABY,ABZ]=bezier3(tX,tY,tZ);
hfig = figure(numero); % Fenetre principale
%ETAPE 3 : On definie les fonctions de la fenetre
figure(numero) % On ouvre la fenetre
title('Dans le plan X,Y,Z') % On nomme la fenetre
view(temp1,temp2); % On positionne son angle de vue
hold on % On le previent que l'on va
% dessiner sur la fenetre et
% que c'est pas la peine d'effacer
% au fur et a mesure ...
plot3(ABX,ABY,ABZ);
plot3(ADX,ADY,ADZ);
plot3(CDX,CDY,CDZ);
plot3(BCX,BCY,BCZ);
xlabel('x'); % On nomme les axes .
ylabel('y'); %
zlabel('z'); %
text(X(1),Y(1),Z(1),'A'); % On nomme les points
text(X(2),Y(2),Z(2),'B'); %
text(X(3),Y(3),Z(3),'C'); %
text(X(4),Y(4),Z(4),'D'); %
hold off % On s'arrete de dessiner
% ETAPE 4 : création de barre de défilement
 (ascenseur ou slider)
% CETTE PREMIERE BARRE VA PERMETTRE DE REGLER L'AZIMUT
hAsc = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'slider', ... % style du bouton
'position', [25 0 145 25],... % position du bouton
'min', VMin,... % valeur de la borne inférieure
'max', VMax,... % valeur de la borne supérieure
'value', VInit, ... % valeur initiale
'callback', [...
% actions à réaliser lors du mouvement
'VAsc = num2str(get(hAsc,''value''));'...
'set(hVal,''string'',VAsc);'...
'figure(numero);'...
'temp1 = round(get(hAsc,''value''));'...
'view(temp1,temp2);'...
]);
% affichage de la valeur courante
hVal = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [25 25 145 15]); % position du bouton
% affichage de la valeur minimale
TxtMin = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [25 41 145 15],... % position du bouton
'string','AZIMUT') ;
% affichage de la valeur minimale
TxtMin = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [0 0 25 25],... % position du bouton
'string',num2str(VMin));
% affichage de la valeur maximale
TxtMax = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [170 0 25 25],... % position du bouton
'string',num2str(VMax));
% FIN POUR LA PREMIERE BARRE
% CETTE DEUXIEME BARRE VA PERMETTRE DE REGLER L'ELEVATION
hAsc2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'slider', ... % style du bouton
'position', [225 0 145 25],... % position du bouton
'min', AMin,... % valeur de la borne inférieure
'max', AMax,... % valeur de la borne supérieure
'value', VInit, ... % valeur initiale
'callback', [... % actions à réaliser lors
 du mouvement
'VAsc2 = num2str(get(hAsc2,''value''));'...
'set(hVal2,''string'',VAsc2);'...
'temp2 = round(get(hAsc2,''value''));'...
'figure(numero);'...
'title(''Dans le plan X,Y,Z'');'...
'view(temp1,temp2);'...
]);
% affichage de la valeur courante
hVal2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [225 25 145 15]); % position du bouton
% affichage de la valeur minimale
TxtMin2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [225 41 145 15],... % position du bouton
'string','ELEVATION');
% affichage de la valeur minimale
TxtMin2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [200 0 25 25],... % position du bouton
'string',num2str(AMin));
% affichage de la valeur maximale
TxtMax2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [370 0 25 25],... % position du bouton
'string',num2str(AMax));
% FIN POUR LA DEUXIEME BARRE
% Initialisations de la deuxieme barre
set(hVal2,'string',num2str(VInit));
% Initialisations de la premiere barre
set(hVal,'string',num2str(VInit));
% ETAPE 5 : création de bouton poussoir
% bouton poussoir pour la fonction 'plan'
BP1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [400 0 100 30],... % position du bouton
'string', 'Placer A,B,C,D', ... % texte du bouton
'callback', [...
'plan;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction 'vue3d'
BP4 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [510 0 70 30],... % position du bouton
'string', 'COONS', ... % texte du bouton
'callback', 'vue3d;'); % fonction, script à appeler
 ou
% commande à exécuter
% bouton poussoir pour la fonction 'planab'
BP5 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [590 0 30 30],... % position du bouton
'string', 'A,B', ... % texte du bouton
'callback', [...
'plan2;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction 'planad'
BP6 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [620 0 30 30],... % position du bouton
'string', 'A,D', ... % texte du bouton
'callback', [...
'plan3;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction 'planbc'
BP7 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [650 0 30 30],... % position du bouton
'string', 'B,C', ... % texte du bouton
'callback', [...
'plan4;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction 'plancd'
BP8 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [680 0 30 30],... % position du bouton
'string', 'C,D', ... % texte du bouton
'callback', [...
'plan5;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction index2
BP10 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [720 0 40 30],... % position du bouton
'string', 'Stop !', ... % texte du bouton
'callback', [...
'close(numero);'...
'Temps,'...
'depart;'...
]); % fonction, script à appeler ou
% commande à exécuter
Index2.m
%Utilisation des fonctions :
%
% coons
% interpo
% bsurf
clear all;
fenetre;
global num
global num2
global temp1
global temp2
global nom3
num=1;
num2=2;
temp1=45;
temp2=45;
figure(num)
hfig = figure(num);
VInit = 45;
points=20;
%
% TRAITEMENT DU CARREAU PRINCIPAL : 'A'
%
%
% affichage de la valeur minimale
TxtMin = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [0 401 300 20],... % position du bouton
'string','Chargement du carreau central');
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 380 70 20],... % position du bouton
'string', 'Charger A', ... % texte du bouton
'callback', [...
'Nom=get(nom1,''string'');'...
'load(Nom);'...
'AX=Bx;'...
'AY=By;'...
'AZ=Bz;'...
'[XA,YA,ZA]=coons(points,Bx,By,Bz);'...
'clear figure(num);'...
'subplot(1,2,2);'...
'figure(num);'...
'mesh(XA,YA,ZA),'...
'title(''Dans le plan X,Y,Z'');'...
'view(temp1,temp2);'...
'xlabel(''x'');'...
'ylabel(''y'');'...
'zlabel(''z'');'...
'text(X(1),Y(1),Z(1),''A'');'...
'text(X(2),Y(2),Z(2),''B'');'...
'text(X(3),Y(3),Z(3),''C'');'...
'text(X(4),Y(4),Z(4),''D'');'...
]); % fonction, script à appeler ou
% commande à exécuter
nom1 = uicontrol(gcf, ... % handle sur fenêtre graphique
'style', 'edit', ... % style du bouton
'position', [80 380 100 20], ... % position du bouton
'string', '' , ... % texte du bouton
'Max', 1, ... % zone multi-lignes
'callback', [... % stockage du prénom
'varnom = get(nom1,''string'');'...
]);
% bouton poussoir pour imprimer au format ps un carreau
 de coons
P12 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 350 70 20],... % position du bouton
'string', 'Impri.', ... % texte du bouton
'callback', [...
'Nom=get(nom3,''string'');'...
'print(Nom);'...
]); % fonction, script à appeler ou
% commande à exécuter
nom3 = uicontrol(gcf, ... % handle sur fenêtre graphique
'style', 'edit', ... % style du bouton
'position', [80 350 100 20], ... % position du bouton
'string', '' , ... % texte du bouton
'Max', 1, ... % zone multi-lignes
'callback', [... % stockage du prénom
'varnom = get(nom3,''string'');'...
]);
%
% TRAITEMENT DU CARREAU 'B'
%
%
% affichage de la valeur minimale
TxtMin = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [0 521 300 19],... % position du bouton
'string','Chargement des carreaux');
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 500 70 20],... % position du bouton
'string', 'Charger B', ... % texte du bouton
'callback', [...
'Nom=get(nom2,''string'');'...
'load(Nom);'...
...
'BX=Bx;'...
'BY=By;'...
'BZ=Bz;'...
...
'distX=X(4)-X(1);'...
'distY=Y(4)-Y(1);'...
'distZ=Z(4)-Z(1);'...
...
'BX(1,1)=BX(1,1)-distX;'...
...
'BY(1,1)=BY(1,1)-distY;'...
...
'BZ(1,1)=BZ(1,1)-distZ;'...
...
'BX(2,1)=BX(2,1)-distX;'...
...
'BY(2,1)=BY(2,1)-distY;'...
...
'BZ(2,1)=BZ(2,1)-distZ;'...
...
'BX(:,2)=AX(:,1);'...
'BY(:,2)=AY(:,1);'...
'BZ(:,2)=AZ(:,1);'...
...
'[XB,YB,ZB]=coons(points,BX,BY,BZ);'...
'figure(num);'...
'subplot(1,2,2);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
'text(BX(1,1),BY(1,1),BZ(1,1),''E'');'...
'text(BX(2,1),BY(2,1),BZ(2,1),''F'');'...
'text(BX(2,2),BY(2,2),BZ(2,2),''G'');'...
'text(BX(1,2),BY(1,2),BZ(1,2),''H'');'...
]); % fonction, script à appeler ou
% commande à exécuter
nom2 = uicontrol(gcf, ... % handle sur fenêtre graphique
'style', 'edit', ... % style du bouton
'position', [80 500 100 20], ... % position du bouton
'string', '' , ... % texte du bouton
'Max', 1, ... % zone multi-lignes
'callback', [... % stockage du prénom
'varnom = get(nom2,''string'');'...
]);
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [190 500 20 20],... % position du bouton
'string', 'C2', ... % texte du bouton
'callback', [...
'BX(:,4)=AX(:,3);'...
'BY(:,4)=AY(:,3);'...
'BZ(:,4)=AZ(:,3);'...
...
'BX(:,6)=AX(:,5);'...
'BY(:,6)=AY(:,5);'...
'BZ(:,6)=AZ(:,5);'...
...
'[XB,YB,ZB]=coons(points,BX,BY,BZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [220 500 20 20],... % position du bouton
'string', 'C1', ... % texte du bouton
'callback', [...
'BX(:,4)=AX(:,3);'...
'BY(:,4)=AY(:,3);'...
'BZ(:,4)=AZ(:,3);'...
...
'[XB,YB,ZB]=coons(points,BX,BY,BZ);'...
'clear figure(num);'...
'subplot(1,2,2);'...
'figure(num);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [250 500 50 20],... % position du bouton
'string', 'Effacer', ... % texte du bouton
'callback', [...
'clear XB;'...
'clear YB;'...
'clear YB;'...
'subplot(1,2,2);'...
'figure(num);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% TRAITEMENT DU CARREAU 'C'
%
%
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 480 70 20],... % position du bouton
'string', 'Charger C', ... % texte du bouton
'callback', [...
'Nom=get(nom3,''string'');'...
'load(Nom);'...
...
'CX=Bx;'...
'CY=By;'...
'CZ=Bz;'...
...
'distX=X(2)-X(1);'...
'distY=Y(2)-Y(1);'...
'distZ=Z(2)-Z(1);'...
...
'CX(1,:)=AX(2,:);'...
'CX(2,1)=CX(2,1)+distX;'...
'CY(1,:)=AY(2,:);'...
'CY(2,1)=CY(2,1)+distY;'...
'CZ(1,:)=AZ(2,:);'...
'CZ(2,1)=CZ(2,1)+distZ;'...
...
'CX(2,2)=CX(2,2)+distX;'...
...
'CY(2,2)=CY(2,2)+distY;'...
...
'CZ(2,2)=CZ(2,2)+distZ;'...
...
'[XC,YC,ZC]=coons(points,CX,CY,CZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
'text(CX(1,1),CY(1,1),CZ(1,1),''I'');'...
'text(CX(2,1),CY(2,1),CZ(2,1),''J'');'...
'text(CX(2,2),CY(2,2),CZ(2,2),''K'');'...
'text(CX(1,2),CY(1,2),CZ(1,2),''L'');'...
]); % fonction, script à appeler ou
% commande à exécuter
nom3 = uicontrol(gcf, ... % handle sur fenêtre graphique
'style', 'edit', ... % style du bouton
'position', [80 480 100 20], ... % position du bouton
'string', '' , ... % texte du bouton
'Max', 1, ... % zone multi-lignes
'callback', [... % stockage du prénom
'varnom = get(nom3,''string'');'...
]);
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [190 480 20 20],... % position du bouton
'string', 'C2', ... % texte du bouton
'callback', [...
'CX(3,:)=AX(4,:);'...
'CY(3,:)=AY(4,:);'...
'CZ(3,:)=AZ(4,:);'...
...
'CX(5,:)=AX(6,:);'...
'CY(5,:)=AY(6,:);'...
'CZ(5,:)=AZ(6,:);'...
...
'[XC,YC,ZC]=coons(points,CX,CY,CZ);'...
'clear figure(num);'...
'subplot(1,2,2);'...
'figure(num);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [220 480 20 20],... % position du bouton
'string', 'C1', ... % texte du bouton
'callback', [...
'CX(3,:)=AX(4,:);'...
'CY(3,:)=AY(4,:);'...
'CZ(3,:)=AZ(4,:);'...
...
'[XC,YC,ZC]=coons(points,CX,CY,CZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [250 480 50 20],... % position du bouton
'string', 'Effacer', ... % texte du bouton
'callback', [...
'clear XC;'...
'clear YC;'...
'clear ZC;'...
'subplot(1,2,2);'...
'figure(num);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% TRAITEMENT DU CARREAU 'D'
%
%
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 460 70 20],... % position du bouton
'string', 'Charger D', ... % texte du bouton
'callback', [...
'Nom=get(nom4,''string'');'...
'load(Nom);'...
...
'DX=Bx;'...
'DY=By;'...
'DZ=Bz;'...
...
'distX=X(4)-X(1);'...
'distY=Y(4)-Y(1);'...
'distZ=Z(4)-Z(1);'...
...
'DX(1,2)=DX(1,2)+distX;'...
'DY(1,2)=DY(1,2)+distY;'...
'DZ(1,2)=DZ(1,2)+distZ;'...
'DX(2,2)=DX(2,2)+distX;'...
'DY(2,2)=DY(2,2)+distY;'...
'DZ(2,2)=DZ(2,2)+distZ;'...
...
'DX(:,1)=AX(:,2);'...
...
'DY(:,1)=AY(:,2);'...
...
'DZ(:,1)=AZ(:,2);'...
...
'[XD,YD,ZD]=coons(points,DX,DY,DZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
'text(DX(1,1),DY(1,1),DZ(1,1),''M'');'...
'text(DX(2,1),DY(2,1),DZ(2,1),''N'');'...
'text(DX(2,2),DY(2,2),DZ(2,2),''O'');'...
'text(DX(1,2),DY(1,2),DZ(1,2),''P'');'...
]); % fonction, script à appeler ou
% commande à exécuter
nom4 = uicontrol(gcf, ... % handle sur fenêtre graphique
'style', 'edit', ... % style du bouton
'position', [80 460 100 20], ... % position du bouton
'string', '' , ... % texte du bouton
'Max', 1, ... % zone multi-lignes
'callback', [... % stockage du prénom
'varnom = get(nom4,''string'');'...
]);
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [220 460 20 20],... % position du bouton
'string', 'C1', ... % texte du bouton
'callback', [...
'DX(:,3)=AX(:,4);'...
'DY(:,3)=AY(:,4);'...
'DZ(:,3)=AZ(:,4);'...
...
'[XD,YD,ZD]=coons(points,DX,DY,DZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [190 460 20 20],... % position du bouton
'string', 'C2', ... % texte du bouton
'callback', [...
'DX(:,3)=AX(:,4);'...
'DY(:,3)=AY(:,4);'...
'DZ(:,3)=AZ(:,4);'...
...
'DX(:,5)=AX(:,6);'...
'DY(:,5)=AY(:,6);'...
'DZ(:,5)=AZ(:,6);'...
...
'[XD,YD,ZD]=coons(points,DX,DY,DZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [250 460 50 20],... % position du bouton
'string', 'Effacer', ... % texte du bouton
'callback', [...
'clear XD;'...
'clear YD;'...
'clear ZD;'...
'subplot(1,2,2);'...
'figure(num);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% TRAITEMENT DU CARREAU 'E'
%
%
% bouton poussoir pour la fonction
P1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 440 70 20],... % position du bouton
'string', 'Charger E', ... % texte du bouton
'callback', [...
'Nom=get(nom5,''string'');'...
'load(Nom);'...
...
'EX=Bx;'...
'EY=By;'...
'EZ=Bz;'...
...
'distX=X(2)-X(1);'...
'distY=Y(2)-Y(1);'...
'distZ=Z(2)-Z(1);'...
...
'EX(1,1)=EX(1,1)-distX;'...
'EY(1,1)=EY(1,1)-distY;'...
'EZ(1,1)=EZ(1,1)-distZ;'...
'EX(1,2)=EX(1,2)-distX;'...
'EY(1,2)=EY(1,2)-distY;'...
'EZ(1,2)=EZ(1,2)-distZ;'...
...
'EX(2,:)=AX(1,:);'...
'EY(2,:)=AY(1,:);'...
'EZ(2,:)=AZ(1,:);'...
...
'[XE,YE,ZE]=coons(points,EX,EY,EZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
nom5 = uicontrol(gcf, ... % handle sur fenêtre graphique
'style', 'edit', ... % style du bouton
'position', [80 440 100 20], ... % position du bouton
'string', '' , ... % texte du bouton
'Max', 1, ... % zone multi-lignes
'callback', [... % stockage du prénom
'varnom = get(nom5,''string'');'...
]);
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [220 440 20 20],... % position du bouton
'string', 'C1', ... % texte du bouton
'callback', [...
'EX(4,:)=AX(3,:);'...
'EY(4,:)=AY(3,:);'...
'EZ(4,:)=AZ(3,:);'...
...
'[XE,YE,ZE]=coons(points,EX,EY,EZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [190 440 20 20],... % position du bouton
'string', 'C2', ... % texte du bouton
'callback', [...
'EX(6,:)=AX(5,:);'...
'EY(6,:)=AY(5,:);'...
'EZ(6,:)=AZ(5,:);'...
...
'[XE,YE,ZE]=coons(points,EX,EY,EZ);'...
'clear figure(num);'...
'figure(num);'...
'subplot(1,2,2);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [250 440 50 20],... % position du bouton
'string', 'Effacer', ... % texte du bouton
'callback', [...
'clear XE;'...
'clear YE;'...
'clear ZE;'...
'subplot(1,2,2);'...
'figure(num);'...
'mesh(XA,YA,ZA);'...
'hold on;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% Les autres fonctions
%
%
%
% STOP
%
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 140 100 30],... % position du bouton
'string', 'Stop !', ... % texte du bouton
'callback', [...
'close(num);'...
'depart;'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% Interpolation
%
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 180 100 30],... % position du bouton
'string', 'Interpolation', ... % texte du bouton
'callback', [...
'[X2,Y2,Z2,U,V]=inter(XA,YA,ZA,2,2);'...
'figure(2);'...
'mesh(X2,Y2,Z2);'...
'xlabel(''x'');'...
'ylabel(''y'');'...
'zlabel(''z'');'...
'title(''On cherche les points de controle a l aide de
 la fonction INTERPO'');'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% bsurf
%
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 220 100 30],... % position du bouton
'string', 'bsurf', ... % texte du bouton
'callback', [...
'[X3,Y3,Z3]=bsurf(X2,Y2,Z2,U,V,101,101);'...
'figure(2);'...
'mesh(X3,Y3,Z3);'...
'xlabel(''x'');'...
'ylabel(''y'');'...
'zlabel(''z'');'...
'title(''On trace la spline a l aide de la fonction BSURF'')'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% Plein ecran
%
% bouton poussoir pour la fonction
P9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [0 260 100 30],... % position du bouton
'string', 'Plein ecran', ... % texte du bouton
'callback', [...
'figure(num2);'...
'hold on;'...
'if (exist(''XA'')==1),'...
'mesh(XA,YA,ZA);'...
'end;'...
'if (exist(''XB'')==1),'...
'mesh(XB,YB,ZB);'...
'end;'...
'if (exist(''XC'')==1),'...
'mesh(XC,YC,ZC);'...
'end;'...
'if (exist(''XD'')==1),'...
'mesh(XD,YD,ZD);'...
'end;'...
'if (exist(''XE'')==1),'...
'mesh(XE,YE,ZE);'...
'end;'...
'hold off;'...
'view(temp1,temp2);'...
'xlabel(''x'');'...
'ylabel(''y'');'...
'zlabel(''z'');'...
'title(''Dans le plan X,Y,Z'')'...
]); % fonction, script à appeler ou
% commande à exécuter
%
% Barre de defilement
%
VMin = 0;
VMax = 180;
AMin = -90;
AMax = 90;
VInit = 45;
temp1 = 45;
temp2 = 45;
hAsc = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'slider', ... % style du bouton
'position', [20 0 150 25],... % position du bouton
'min', VMin,... % valeur de la borne inférieure
'max', VMax,... % valeur de la borne supérieure
'value', VInit, ... % valeur initiale
'callback', [... % actions à réaliser lors
 du mouvement
'VAsc = num2str(get(hAsc,''value''));'...
'set(hVal,''string'',VAsc);'...
'clear figure(num);'...
'figure(num);'...
'temp1 = round(get(hAsc,''value''));'...
'title(''Dans le plan X,Y,Z'');'...
'view(temp1,temp2);'...
'xlabel(''x'');'...
'ylabel(''y'');'...
'zlabel(''z'');'...
]);
% affichage de la valeur minimale
TxtMin = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [20 41 150 20],... % position du bouton
'string','Azimut');
% affichage de la valeur
hVal = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [20 25 150 15]); % position du bouton
% affichage de la valeur minimale
TxtMin = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [0 0 20 25],... % position du bouton
'string',num2str(VMin));
% affichage de la valeur maximale
TxtMax = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [170 0 20 25],... % position du bouton
'string',num2str(VMax));
%
% Barre de defilement
%
hAsc2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'slider', ... % style du bouton
'position', [20 70 150 25],... % position du bouton
'min', AMin,... % valeur de la borne inférieure
'max', AMax,... % valeur de la borne supérieure
'value', VInit, ... % valeur initiale
'callback', [... % actions à réaliser lors
 du mouvement
'VAsc2 = num2str(get(hAsc2,''value''));'...
'set(hVal2,''string'',VAsc2);'...
'temp2 = round(get(hAsc2,''value''));'...
'figure(num);'...
'title(''Dans le plan X,Y,Z'');'...
'view(temp1,temp2);'...
'xlabel(''x'');'...
'ylabel(''y'');'...
'zlabel(''z'');'...
]);
% affichage de la valeur minimale
TxtMin = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [20 111 150 20],... % position du bouton
'string','Elevation');
% affichage de la valeur
hVal2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [20 95 150 15]); % position du bouton
% affichage de la valeur minimale
TxtMin2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [0 70 20 25],... % position du bouton
'string',num2str(AMin));
% affichage de la valeur maximale
TxtMax2 = uicontrol(hfig, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [170 70 20 25],... % position du bouton
'string',num2str(AMax));
% Initialisations
set(hVal2,'string',num2str(VInit));
% Initialisations
set(hVal,'string',num2str(VInit));
Inter.m
function [Sortie1,Sortie2,Sortie3,Sortie4,Sortie5] = inter(Qx,Qy,Qz,p,q);
%fonction d'interpolation :
%cette fonction recherche la surface spline d'interpolation.
%Cela retourne les points de controle, ainsi que les vecteurs
 nodaux
[m,n]=size(Qx);
%On cherche U barre
for l = 1:n
distu(1,l)=0;
for i = 2:m
courant=sqrt((Qx(i,l)-Qx(i-1,l))^2+(Qy(i,l)-Qy(i-1,l))^2+(Qz(i,l)-Qz(i-1,l))^2);
distu(i,l)=courant+distu(i-1,l);
end;
for i = 1:m
Ut(i,l)=distu(i,l)/distu(m,l);
end;
end;
for i = 1:m
Ub(i)=Ut(i,1);
for l = 2:n
Ub(i) = Ub(i)+Ut(i,l);
end;
Ub(i)=Ub(i)/(m+1);
end;
%On cherche V barre
for l = 1:m
distv(1,l)=0;
for i = 2:n
courant=sqrt((Qx(l,i)-Qx(l,i-1))^2+(Qy(l,i)-Qy(l,i-1))^2+(Qz(l,i)-Qz(l,i-1))^2);
distv(i,l)=courant+distv(i-1,l);
end;
for i = 1:n
Vt(i,l)=distv(i,l)/distv(n,l);
end;
end;
for i = 1:n
Vb(i)=Vt(i,1);
for l = 2:m
Vb(i) = Vb(i)+Vt(i,l);
end;
Vb(i)=Vb(i)/(n+1);
end;
%On cherche U:
for i = 1:p
U(i)=0;
end;
for i = m+1:m+p
U(i)=1;
end;
for i = p+1:m
U(i)=Ub(i-p);
for j = 1:p-1
U(i)=U(i)+Ub(i+j-p);
end
U(i)=U(i)/p;
end;
%On cherche V:
for i = 1:q
V(i)=0;
end;
for i = n+1:n+q
V(i)=1;
end;
for i = q+1:n
V(i)=Vb(i-q);
for j = 1:q-1
V(i)=V(i)+Vb(i+j-q);
end;
V(i)=V(i)/q;
end;
Temp=matrice(p,m,U,Ub,1);
for l = 1:n
Tx(:,l)=Temp\Qx(:,l);
Ty(:,l)=Temp\Qy(:,l);
Tz(:,l)=Temp\Qz(:,l);
end;
Temp=matrice(q,n,V,Vb,1);
for l = 1:m
Px(:,l)=Temp\Tx(l,:)';
Py(:,l)=Temp\Ty(l,:)';
Pz(:,l)=Temp\Tz(l,:)';
end;
Sortie1=Px;
Sortie2=Py;
Sortie3=Pz;
Sortie4=U;
Sortie5=V;
Matrice.m
function result=matrice(p,n,vect,X,sens)
if sens==1
for j=1:length(X)
for i=1:n
temp(j,i)=nenx(p,i,vect,X(j));
end;
end;
else
for j=1:length(X)
for i=1:n
temp(i,j)=nenx(p,i,vect,X(j));
end;
end;
end;
result=temp;
Nenx.m
function result=nenx(m,i,vect,x)
if m == 1
%spline de base
if (vect(i) <= x)&(x <= vect(i+1))
Som=1;
else
Som=0;
end;
else
%multiplicite maximale
if vect(i+m)==vect(i+1)
if (vect(i) <= x)&(x <= vect(i+m))
Som=((x-vect(i))^(m-1))/((vect(i+m)-vect(i))^(m-1));
else
Som=0;
end;
else
%multiplicite maximale
if vect(i+m-1)==vect(i)
if (vect(i) <= x)&(x <= vect(i+m))
Som=((vect(i+m)-x)^(m-1))/((vect(i+m)-vect(i))^(m-1));
else
Som=0;
end;
else
%formule de reccurence
Temp1=nenx(m-1,i,vect,x);
Temp2=nenx(m-1,i+1,vect,x);
Som=((x-vect(i))*Temp1)/(vect(i+m-1)-vect(i))+(vect(i+m)-x)*Temp2/(vect(i+m)-vect(i+1));
end;
end;
end;
end;
result=Som;
Plan.m
% ********************
% * *
% * Avertissemment *
% * *
% ********************
%
%Cette fonction depend TOTALEMENT de la fonction 'index'
%
global temps
global Temps
temps=cputime; %le temp present !
global numero
global num % On declare les variables globales
% que l'on va utiliser ou modifier
global X % ( elles doivent etre normalement
global Y % declarer dans la fonction principale )
global Z %
global ABX
global ABY
global ABZ
global BCX
global BCY
global BCZ
global ADX
global ADY
global ADZ
global CDX
global CDY
global CDZ
%On place les points dans le plan (X,Y)
figure(num) % Ouverte de la fenetre secondaire
subplot(2,2,1);
hold on
axis([0 1 0 1 ]);
title('Dans le plan X,Y')
hold off
% affichage
TxtMin = uicontrol(gcf, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [501 21 79 20],... % position du bouton
'string','dans (X,Y)');
% bouton poussoir pour placer A:
BP1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [500 0 20 20],... % position du bouton
'string', 'A', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,1);'...
'hold on;'...
'[X(1),Y(1)]=ginput(1);'...
'plot(X(1),Y(1),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer B
BP2 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [520 0 20 20],... % position du bouton
'string', 'B', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,1);'...
'hold on;'...
'[X(2),Y(2)]=ginput(1);'...
'plot(X(2),Y(2),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer C
BP3 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [540 0 20 20],... % position du bouton
'string', 'C', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,1);'...
'hold on;'...
'[X(3),Y(3)]=ginput(1);'...
'plot(X(3),Y(3),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer D
BP4 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [560 0 20 20],... % position du bouton
'string', 'D', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,1);'...
'hold on;'...
'[X(4),Y(4)]=ginput(1);'...
'plot(X(4),Y(4),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% affichage
TxtMin = uicontrol(gcf, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [680 21 80 20],... % position du bouton
'string','Affichage');
% bouton poussoir pour afficher A
BP5 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [680 0 20 20],... % position du bouton
'string', 'A', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,1);'...
'hold on;'...
'plot(X(1),Y(1),''yo'');'...
'text(X(1),Y(1),''A'');'...
'hold off;'...
'subplot(2,2,2);'...
'hold on;'...
'plot(X(1),Z(1),''yo'');'...
'text(X(1),Z(1),''A'');'...
'hold off;'...
'subplot(2,2,3);'...
'hold on;'...
'plot(Y(1),Z(1),''yo'');'...
'text(Y(1),Z(1),''A'');'...
'hold off;'...
'subplot(2,2,4);'...
'hold on;'...
'plot3(X(1),Y(1),Z(1),''yo'');'...
'text(X(1),Y(1),Z(1),''A'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour afficher B
BP6 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [700 0 20 20],... % position du bouton
'string', 'B', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,1);'...
'hold on;'...
'plot(X(2),Y(2),''yo'');'...
'text(X(2),Y(2),''B'');'...
'hold off;'...
'subplot(2,2,2);'...
'hold on;'...
'plot(X(2),Z(2),''yo'');'...
'text(X(2),Z(2),''B'');'...
'hold off;'...
'subplot(2,2,3);'...
'hold on;'...
'plot(Y(2),Z(2),''yo'');'...
'text(Y(2),Z(2),''B'');'...
'hold off;'...
'subplot(2,2,4);'...
'hold on;'...
'plot3(X(2),Y(2),Z(2),''yo'');'...
'text(X(2),Y(2),Z(2),''B'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour afficher C
BP7 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [720 0 20 20],... % position du bouton
'string', 'C', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,1);'...
'hold on;'...
'plot(X(3),Y(3),''yo'');'...
'text(X(3),Y(3),''C'');'...
'hold off;'...
'subplot(2,2,2);'...
'hold on;'...
'plot(X(3),Z(3),''yo'');'...
'text(X(3),Z(3),''C'');'...
'hold off;'...
'subplot(2,2,3);'...
'hold on;'...
'plot(Y(3),Z(3),''yo'');'...
'text(Y(3),Z(3),''C'');'...
'hold off;'...
'subplot(2,2,4);'...
'hold on;'...
'plot3(X(3),Y(3),Z(3),''yo'');'...
'text(X(3),Y(3),Z(3),''C'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour afficher D
BP8 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [740 0 20 20],... % position du bouton
'string', 'D', ... % texte du bouton
'callback', [...
'figure(num);'....
'subplot(2,2,1);'...
'hold on;'...
'plot(X(4),Y(4),''yo'');'...
'text(X(4),Y(4),''D'');'...
'hold off;'...
'subplot(2,2,2);'...
'hold on;'...
'plot(X(4),Z(4),''yo'');'...
'text(X(4),Z(4),''D'');'...
'hold off;'...
'subplot(2,2,3);'...
'hold on;'...
'plot(Y(4),Z(4),''yo'');'...
'text(Y(4),Z(4),''D'');'...
'hold off;'...
'subplot(2,2,4);'...
'hold on;'...
'plot3(X(4),Y(4),Z(4),''yo'');'...
'text(X(4),Y(4),Z(4),''D'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour fermer la fenetre et
% refaire une initialisation
BP9 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [720 490 40 30],... % position du bouton
'string', 'Stop!', ... % texte du bouton
'callback', [...
'close(num);'...
'tX=[X(4) 0.2*DD(1,1)+X(4) DDD(1,1)*0.1+0.4*DD(1,1)+X(4)
 DDC(1,1)*0.1+DC(1,1)*0.4+X(3) DC(1,1)*0.2+X(3) X(3)];'...
'tY=[Y(4) 0.2*DD(2,1)+Y(4) DDD(2,1)*0.1+0.4*DD(2,1)+Y(4)
 DDC(2,1)*0.1+DC(2,1)*0.4+Y(3) DC(2,1)*0.2+Y(3) Y(3)];'...
'tZ=[Z(4) 0.2*DD(3,1)+Z(4) DDD(3,1)*0.1+0.4*DD(3,1)+Z(4)
 DDC(3,1)*0.1+DC(3,1)*0.4+Z(3) DC(3,1)*0.2+Z(3) Z(3)];'...
'[CDX,CDY,CDZ]=bezier3(tX,tY,tZ);'...
...
'tX=[X(2) 0.2*DB(1,2)+X(2) DDB(1,2)*0.1+0.4*DB(1,2)+X(2)
 DDC(1,2)*0.1+DC(1,2)*0.4+X(3) DC(1,2)*0.2+X(3) X(3)];'...
'tY=[Y(2) 0.2*DB(2,2)+Y(2) DDB(2,2)*0.1+0.4*DB(2,2)+Y(2)
 DDC(2,2)*0.1+DC(2,2)*0.4+Y(3) DC(2,2)*0.2+Y(3) Y(3)];'...
'tZ=[Z(2) 0.2*DB(3,2)+Z(2) DDB(3,2)*0.1+0.4*DB(3,2)+Z(2)
 DDC(3,2)*0.1+DC(3,2)*0.4+Z(3) DC(3,2)*0.2+Z(3) Z(3)];'...
'[BCX,BCY,BCZ]=bezier3(tX,tY,tZ);'...
...
'tX=[X(1) 0.2*DA(1,2)+X(1) DDA(1,2)*0.1+0.4*DA(1,2)+X(1)
 DDD(1,2)*0.1+DD(1,2)*0.4+X(4) DD(1,2)*0.2+X(4) X(4)];'...
'tY=[Y(1) 0.2*DA(2,2)+Y(1) DDA(2,2)*0.1+0.4*DA(2,2)+Y(1)
 DDD(2,2)*0.1+DD(2,2)*0.4+Y(4) DD(2,2)*0.2+Y(4) Y(4)];'...
'tZ=[Z(1) 0.2*DA(3,2)+Z(1) DDA(3,2)*0.1+0.4*DA(3,2)+Z(1)
 DDD(3,2)*0.1+DD(3,2)*0.4+Z(4) DD(3,2)*0.2+Z(4) Z(4)];'...
'[ADX,ADY,ADZ]=bezier3(tX,tY,tZ);'...
...
'tX=[X(1) 0.2*DA(1,1)+X(1) DDA(1,1)*0.1+0.4*DA(1,1)+X(1)
 DDB(1,1)*0.1+DB(1,1)*0.4+X(2) DB(1,1)*0.2+X(2) X(2)];'...
'tY=[Y(1) 0.2*DA(2,1)+Y(1) DDA(2,1)*0.1+0.4*DA(2,1)+Y(1)
 DDB(2,1)*0.1+DB(2,1)*0.4+Y(2) DB(2,1)*0.2+Y(2) Y(2)];'...
'tZ=[Z(1) 0.2*DA(3,1)+Z(1) DDA(3,1)*0.1+0.4*DA(3,1)+Z(1)
 DDB(3,1)*0.1+DB(3,1)*0.4+Z(2) DB(3,1)*0.2+Z(2) Z(2)];'...
'[ABX,ABY,ABZ]=bezier3(tX,tY,tZ);'...
...
'plot3(ABX,ABY,ABZ);'...
'title(''Dans le plan X,Y,Z'');'...
'view(temp1,temp2);'...
'hold on;'...
'plot3(ADX,ADY,ADZ);'...
'plot3(CDX,CDY,CDZ);'...
'plot3(BCX,BCY,BCZ);'...
'xlabel(''x'');'...
'ylabel(''y'');'...
'zlabel(''z'');'...
'text(X(1),Y(1),Z(1),''A'');'...
'text(X(2),Y(2),Z(2),''B'');'...
'text(X(3),Y(3),Z(3),''C'');'...
'text(X(4),Y(4),Z(4),''D'');'...
'hold off;'...
'Temps=cputime-temps+Temps;'...
]); % fonction, script à appeler ou
% commande à exécuter
%
%On place les points dans le plan (X,Z)
%
figure(num);
subplot(2,2,2);
hold on
axis([0 1 0 1 ]);
title('Dans le plan X,Z')
hold off
% affichage
TxtMin = uicontrol(gcf, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [420 21 80 20],... % position du bouton
'string','dans (X,Z)');
% bouton poussoir pour placer A
BP1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [420 0 20 20],... % position du bouton
'string', 'A', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,2);'...
'hold on;'...
'[X(1),Z(1)]=ginput(1);'...
'plot(X(1),Z(1),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer B
BP2 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique 'style', 'push', ... % style du bouton
'position', [440 0 20 20],... % position du bouton
'string', 'B', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,2);'...
'hold on;'...
'[X(2),Z(2)]=ginput(1);'...
'plot(X(2),Z(2),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer C
BP3 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [460 0 20 20],... % position du bouton
'string', 'C', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,2);'...
'hold on;'...
'[X(3),Z(3)]=ginput(1);'...
'plot(X(3),Z(3),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer D
BP4 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [480 0 20 20],... % position du bouton
'string', 'D', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,2);'...
'hold on;'...
'[X(4),Z(4)]=ginput(1);'...
'plot(X(4),Z(4),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
%On place les points dans le plan (Y,Z)
figure(num)
hold on;
subplot(2,2,3);
axis([0 1 0 1 ]);
title('Dans le plan Y,Z')
hold off
% affichage
TxtMin = uicontrol(gcf, ... % handle sur fenêtre
 graphique
'style', 'text', ... % style du bouton
'position', [339 21 80 20],... % position du bouton
'string','dans (Y,Z)');
% bouton poussoir pour placer A
BP1 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [340 0 20 20],... % position du bouton
'string', 'A', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,3);'...
'hold on;'...
'[Y(1),Z(1)]=ginput(1);'...
'plot(Y(1),Z(1),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer B
BP2 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique 'style', 'push', ... % style du bouton
'position', [360 0 20 20],... % position du bouton
'string', 'B', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,3);'...
'hold on;'...
'[Y(2),Z(2)]=ginput(1);'...
'plot(Y(2),Z(2),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer C
BP3 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [380 0 20 20],... % position du bouton
'string', 'C', ... % texte du bouton
'callback', [...
'figure(num);'...
'subplot(2,2,3);'...
'hold on;'...
'[Y(3),Z(3)]=ginput(1);'...
'plot(Y(3),Z(3),''r+'');'...
'hold off;'...
]); % fonction, script à appeler ou
% commande à exécuter
% bouton poussoir pour placer D
BP4 = uicontrol(gcf, ... % handle sur la fenêtre
 graphique
'style', 'push', ... % style du bouton
'position', [400 0 20 20],... % position du bouton
'string', 'D', ... % texte du bouton
'callback', [...
'figure(num);'..