Brevet FR2716024A1 — publié le 19950811

La présente invention est du domaine du traitement de l'information et elle a plus particulièrement pour objet un procédé pour traiter simultanément une pluralité de données coordonnées ou relièes entre elles, ou encore des données de systèmes. L'art antérieur en la matière s'est intéressé au traitement des données selon des procédés globaux essentiellement non parallèles fondés, sur la paramétrisation (par une variable réelle), par exemple s'il s'agit de données topologiques, des courbes et des surfaces, laquelle paramétrisation se fonde sur la continuité, c'est à dire produit les pixels ou voxels de proche en proche; par produire on entend aussi bien: choisir, allumer, colorier, etc...). Un inconvénient de l'art antérieur mettant en oeuvre la paramétrisation, réside dans le fait que cette opération nécessite, pour chaque nouvelle application, de rechercher chaque fois une nouvelle solution, sans pouvoir faire appel à une méthode générale; en outre l'art antérieur ne permet pas de visualiser l'ensemble des solutions des systèmes sus mentionnés. Le procédé de l'invention consiste, dans sa plus grande généralité, en la description automatisée des points du carré des neuf pixels, ou des points du cube des vingt-sept voxels qui appartiennent, respectivement, au bord d'un objet plan ou à l'enveloppe d'un objet solide. Avantageusement la description automatisée peut être réalisée au moyens d'outils tels que logiciels, microprocesseurs, etc...,et elle consiste à paralleliser, puisque chaque carré ou cube élémentaire reçoit ses propres résultats indépendamment de ses voisins. Suivant un autre aspect de l'invention, celle-ci consiste en un procédé de reconnaissance locale de formes (surfaces volumes ou autres ensembles de solutions de systèmes de dimension supérieure, consistant à rechercher les solutions, par exemple pixels ou voxels, puis à lisser les solutions trouvées, soit encore en un procédé de résolution, utilisant un ordinateur et permettant de résoudre n'importe quelle équation ou système d'équations à un nombre fini quelconque d'inconnues, réelles ou constituant les éléments d'un espace euclidien ou d'un sous espace d'un tel espace. Lorsque l'espace des inconnues est un espace réel de dimension 2 (et en particulier l'ensemble des solutions d'une équation à deux inconnues réelles) le procédé permet d'obtenir une représentation graphique de l'ensemble des solutions. Lorsque l'espace des inconnues est un espace réel de dimension 3 (et en particulier l'ensemble des solutions d'une équation à trois inconnues réelles, ou un système d'équation à trois inconnues réelles)) le procédé permet d'obtenir une représentation graphique de l'ensemble des solutions par une méthode avantageuse de projection. Dans ce dernier cas o la représentation graphique est obtenue par une méthode de projection, le procédé permet d'obtenir la rotation de l'objet représenté, autour d'un axe quelconque, et sa recopie après translation afin de le représenter en même temps sous plusieurs angles Lorsque l'espace des inconnues est un espace réel de dimension 3 (et en particulier pour l'ensemble des solutions d'une équation à trois inconnues réelles ou d'un système d'équations à trois inconnues réelles), concernant la représentation graphique mentionnée ci-dessus au paragraphe 3, l'invention permet de faire avantageusement tourner l'objet dans l'espace autour d'un axe quelconque, afin de représenter l'ensemble des solutions visualisé sous plusieurs angles, puis d'obtenir les caractéristiques numériques d'un élément de l'ensemble des solutions désigné par un procédé informatique interactif. Une application avantageuse de l'invention concerne la synthèse d'image, par la possibilité de représenter graphiquement des objets définis dans un espace réel de dimension 2 (et notamment dans le plan), par des équations ou, éventuellement selon les applications envisagées, par des systèmes d'équations. Une application avantageuse de l'invention concerne la synthèse d'image, par la possibilité avantageuse de représenter graphiquement des objets définis dans un espace réel de dimension 3, par des équations ou, éventuellement selon les applications envisagées, par des systèmes d'équations. Une application de l'invention concerne la synthèse d'image par la possibilité avantageuse de représenter graphiquement des objets définis dans un espace réel de dimension 3, par des équations ou, éventuellement selon les applications envisagées, des systèmes d'équations, et de faire tourner l'objet dans l'espace et de le translater autour d'un axe quelconque, afin de représenter l'ensemble des solutions visualisé avantageusement sous plusieurs angles. Une application avantageuse de l'invention concerne le calcul scientifique. Compte tenu des principes mathématiques, algorithmiques et informatiques sur lesquels sont fondés les algorithmes présentés, les logiciels applicatifs développés à partir de ces algorithmes sont implémentables sur tout ordinateur (micro, mini, etc.) et en particulier sur ceux utilisant avantageusement le parallélisme des calculs (comme les ordinateurs massivement parallèles). On va donné maintenant un exemple de mise en oeuvre de l'invention à travers un programme écrit en langage TURBO PASCAL qui figure sur les tableaux séquentiels I à XI annexés, ainsi que deux applications à la formation de figures géométriques représentées sur les deux planches annexées sur lesquelles: - les figures la à If illustrent la formation d'une sphère à partir d'une calotte sphérique, et. - la figures 2a à 2h illustrent la formation d'un solide "biperforé" à partir de deux tores accolés. Bien que l'on ait décrit ou représenté des formes particulières de mise en oeuvre du procédé de l'invention, il doit être, bien sûr, compris que la portée de cette dernière n'est pas limitée à ces formes données à titre d'exemples illustratifs, mais que sa portée est celle des définitions générales formulées plus haut. TABLEAU I program discrO; uses crt, graph, init gra, routsurf. typessu; const grisl: FillPattemrnType = (SEE BB EE, $BB, EE, $BB, S $EE, $BB); gris2: FillPatternmType = ($B6, $DB, $6D, $B6, SDB. $6D, $B6, $DB); gris3: FillPattemType = ($B5, $6B, $B6, $6B, $D6, $6D, $B6, $6D); gns4: FiilPatternType = ($B5, $AD, $D5, S56, $6A, $AD, $D5, S6A); gnris5: FillPatternType = ($AA, $AD, S55, $D5, $AA, $AD, $55, $B5); type point2D = array(1..21 of word; typbord= (neg, pos); var xmin, xmax. ymin, ymax, zmin,. zmax, minxdetect, maxx_detect.minydetect, maxyv_detect. minzdetect, maxzdetect, step_l: real; unite: real; diametre: real:; originel, onrigine2, origine3: real; teta, phy, mu: real: flag: boolean; facette: array[1..4] of point2D: compteurl, compteur2: integer im_1oc: array[- ..1] of boolean; } negpos: typbord: traitement. voirsomrnmtriedr. voirsing: boolean; PROCEDURE initialisation: begin init_graphmode; pas de traits} setlinestvle(4, SO0, normwidth); traits couleur du fond} setlinestyle(0, $0, normwidth); setcolor(getbkcolor); } traits couleur du fond} setlinestyle(O, $0, normwidth); setcolor(colorl); } negpos:= pos; traitement:= false: voir somnm_triedr:= false; voir sing:= false; xmin:= 25: xmax:= 25: ymrnin:= -25; ymax:= 25; zmnin:=-15; zmax:= 15; stepl:= 0. 25; teta:=0.7; phv:= 0.7; mu:=O; } teta:=0.5: phy:= 0.7; mu:= 0: } TABLEAU I I { pour tore à 2 trous} teta:= 0.7; phy:=0.1; mu:= -0.75; teta:= 0.5; phy:= 0.8; mu:= O; } end; FUNCTION f(x, y, z: real): real; begin f:= x+y- z; } tore à deux trous} if ((x o -11) and (xo 11)) or (yo 0) then begin if x ≤ 0 then f:= sqrt( sqn x +11- 8*(x+l 1)/sqrt(sqr(x+l 1) + sqr(y))) + sqr(y 8*y/sqrt(sqr(x+ 1)+ sqr(y))) + sqr(z) ) - 3 else - 2000*exp((sqrt(((sqr(x) + sqr(y)))/2+ 30*sqr(z)))) else f:= sqrt( sqr(x - 11- 8*(x1 1)/sqrt(sqr(x-1 1) + sqr(y))) + sqr!y - 8*y/sqrt(sqr(x-1 1)+ sqny))) + sqr(z) ) - 3 end - 2000*exp(-(sqrt(((sqr(x) + sqr(y)))/2+ 30*sqr(z)))); end else f:= 1; cone de révolution} f:= sqr(2*x -1) + sqr(2*y-3) sqr(3*z); } cone} f:= sqr(3*x -1) + sqr(2*y-3) - sqr(7*z); } (tore} if (x o<> 0) or (y o 0) then f:= sqrt( sqr(x - 6*x/sqrt(sqr(x) + sqr(y))) + sqr(y - 6*y/sqrt(sqr(x) + sqr(y))) + sqr(z) ) - 4.5 elsef:=l; } sphere avec triedres orthonormés} f:= sqrt( sqr(x) + sqr(y) + sqr(z) ) - 10; } end FUNCTION Grx(x, y, z, teta. phy, mu: real): real; BEGIN Grx:= -y*sin(teta) + x*cos(teta)*cos(phy) - z*cos(teta)*sin(phy); } Grx:= cos(phy)*cos(teta)*x + sin(teta)*(cos(mu)+cos(teta)*smin(mu))*y -(costeta)*sin(phy)*cos(mu! + sin(teta)*smin(mu))*z; END; FUNCTION Gry(x, y, z, teta. phv, mu: real): real; TABLEAU III BEGIN Gry:= y*cos(teta) - x*smin(teta)*cos(phy) - z*sin(teta)*sin(phy); } Gry:= cos(phy)*sin(teta)*x + (cos(teta)*cos(mu) + sin(mu)*sin(teta)*sin(phy))*y + + (cos(teta)*sin(mu) - cos(mu)*sin(teta)*sin(phy))*z: END; FUNCTION Grz(x, y, z. teta. phy, mu: real): real; BEGIN Grz:= z*cos(phy) + x*smin(phy); } Grz:= x*sin(phy) + cos(phy)*sin(mu)*y + cos(phy)*cos(mu)*z; END; FUNCTION Ptx(Gx. Gy, Gz, teta, phy, mu: real): real; begin Ptx:= cos(phy)*cos(teta)*Gx + sin(teta)*cos(phy)*Gy + sin(phy) *Gz; end; FUNCTION Pty(Gx, Gy, Gz, teta. phy, mu: real): real; begin Pty:= (-cos(mu)*sin(teta) - {+} sin(phy)*sin(mu)*cos(teta))*Gx + (cos(mu)*cos teta) - {+} sin(phy)*sinm(mu)*sin(teta))Gy + sin(mu)*cos(phy) *Gz: end: FUNCTION Ptz(Gx. Gy, Gz, teta, phy, mu: real): real: begin Ptz:= (cos(mu)*sin(phy)*cos(teta) - sin(mu)*sinm(teta))*Gx + (sin(mu)*cos(teta) + cos(mu)*sin(phy)*sin(teta))*Gy + cos(mu)*cos(phy) *Gz: end; FUNCTION coordl_P(Gx. Gy, Gz: real): word; begin coordlP:= trunc(getmaxx/2 + Gx); end; FUNCTION coord2_P(Gx, Gy, Gz: real): word; begin coord2_P:= trunc(getmaxy/2 - Gz); end; PROCEDURE facette 1(x, y, z. teta. phy, mu: real; colorn word; sing: boolean); begin TABLEAU IV facette[l][l] := coordlP( Grx(x, y, z, teta, phy, mu)+ Grx(unite, 0, 0, teta phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, O, 0, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(unite, 0, 0, teta, phy, mu)); facette[ 1][2] := coord2_P( Grx(x, y, z, teta, phy, mu) + Grx(umnite, 0, 0, teta, phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, 0, 0, teta. phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, 0, 0, teta. phy, mu)); facette[2][1] := coordlP( Grx(x, y, z, teta, phy, mu) + Grx(unite. unite, 0, teta. phy, mu), Gry(x. y, z, teta, phy, mu) + Gry(unite, unite, 0, teta, phy, mu), Grz(x, y, z, teta. phy, mu) + Grz(unite, unite, O, teta, phy, mu)); facettet2][21:= coord2_P( Grx(x, y, z, teta, phy, mu) + Grx(unite, unite, 0, teta, phy, mu), Gryv(x, y, z, teta. phy, mu) + Gry(unite, unite, 0, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(unite, unite, 0, teta. phy, mu)); facette[3][1] := coordl_P( Grx(x, y, z, teta, phy, mu) + Grxfunite. unite. unite. teta. phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, unite, unite, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(unite, unite, unite, teta. phy, mu)); facette[3][21:= coord2 P( Grx(x. y, z. teta, phy, mu) + Grx(unite. unite. unite, teta, phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, unite. unite, teta. phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, unite, unite, teta, phy, mu) ); facette[4][1] = coordl_P( Grx(x. y, z, teta, phy, mu) + Grx(unite. 0., unite, teta, phy, mu), Gry(x. y, z. teta. phy, mu) + Gry(unite, 0, unite, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(unite, 0, unite, teta. phy, mu)); facette[4][2] := coord2 P( Grx(x, y, z. teta, phy, mu) + Grx(unite, 0, unite. teta. phy, mu), Gry(x. y, z, teta, phy, mu) + Gry(unite. 0. unite. teta, phy, mu), Grz(x. y, z, teta, phy, mu) + Grz(unite, 0, unite, teta. phy, mu)); if sing then {( serfilllpattern(gris 1, color) } setfilstylef 1, color) else setfillpattern(gris5,color); fillpoly(4. facette); end; PROCEDURE facette2(x. y, z, teta, phy, mu: real; color word; sing: boolean); begin facette[l][1] := coordlP( Grx(x, y, z, teta. phy, mu) + Grxtunite. 0, unite, teta. phy, mu), Gry(x, y, z, teta. phy, mu) + Gry(unite, 0, unite. teta. phy, mu), GrzIx. y, z, teta. phy, mu) + Grzlunite, 0, unite, teta. phy, mu)); facettefl][2] := coord2 P( Grx(x, y, z, teta. phy, mu) + Grx(unite, 0, unite, teta, phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, 0, unite. teta, phy, mu), Grz( x. y, z. teta, phy, mu) + Grz(unite, 0. unite, teta. phy, mu)); facette[2][1] := coordl P( Grx(x, y, z, teta. phy, mu) +Grx(O, O, unite, teta. phy, mu), Gry(x. y, z. teta phy, mu) + Gry(0, 0, unite, teta. phy, mu), Grz(x. y, z, teta, phy, mu) + Grz(O, 0, unite, teta phy, mu)); TABLEAU V facette[2][2] := coord2_P( Grx(x, y, z, teta, phy, mu) + Grx(O, O, unite, teta, phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(O. O, unite, teta, phv, mu), Grz(x, y, z. teta, phy, mu) + Grz(O. O, unite, teta, phy, mu)); facette[3] [1] := coordlP( Grx(x, y, z, teta, phy, mu) + Grx(O, unite, unite, teta, phy, mu), Gry(x, y, z. teta, phy, mu) + Gry(O, unite, unite, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(O, unite, unite, teta. phy, mu)); facette[3][2] := coord2_P( Grx(x, y, z, teta, phy, mu) + Grx(O, unite, unite. teta. phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(O, unite, unite, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Gtz(O, unite, unite, teta, phy, mu)); facettel[4][1] := coordlP( Grx(x, y, z, teta, phy, mu) + Grx(unite, unite, unite, teta. phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, unite, unite. teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, unite, unite, teta. phy, mu); facette[4][2] := coord2 P( Grx(x, y, z, teta, phy, mu) + Grx(unite, unite, unite. teta phy, mu), Gry(x, y, z. teta, phy, mu) + Gry(unite. unite. unite. teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, unite, unite, teta, phy, mu) ); if sing then { setflstyvle( 1, color) } setfillstyle( 1, color) else setfillpattemrn(gris 1, color); fillpoly(4, facette); end; PROCEDURE facette5(x. y, z, teta, phy, mu: real; color word; sing: boolean); begin facette[l][l] := coordlP( Grx(x, y, z, teta, phy, mu) + Grx(unite, 0, 0, teta. phy, mu), Gry(x, y, z. teta, phy, mu) + Gry(unite, O, O, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, O, O, teta, phy. mu) ); facette[l][2] = coord2_P( Grx(x, y, z. teta, phy, mu) + Grx(unite, O, O, teta phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, O, O, teta, phy, mu), Grz(x. y, z, teta, phy, mu) + Grz(unite, O, O, teta, phy, mu) ); facette[2][1] = coordlP( Grx(x, y, z, teta, phy, mu) + Grx(O, O, O, teta, phy, mu), Gry(x. y, z, teta, phy, mu) + Gry(O, 0. 0, teta, phy, mu), Grz(x, y, z. teta. phy, mu) + Grz(O. 0, 0. teta, phy, mu)); facette[2][2] := coord2_P( Grx(x. y, z, teta. phy, mu) + Grx(O, O, O, teta, phy, mu), Gry(x. y, z, teta, phy, mu) + Gry(O, O, O, teta, phy, mu), Grz(x. y, z, teta, phy, mu) + Grz(O, O, O, teta, phy, mu)); facette[3][1] := coordl_P( Grx(x, y, z, teta, phy, mu) + Grx(O, unite, O, teta. phy, mu), Gry(x, y, z, teta phy, mu) + Gry(O, unite, O, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(O, unite, O, teta, phy, mu) ); facette[3][2] := coord2_P( Grx(x, y, z, teta, phy, mu) + Grx(O, unite, O, teta. phy, mu), Gry(x. y, z. teta, phy, mu) + Gry(O, unite, O, teta, phy, mu), Grz(x. y, z. teta, phy, mu) + Grz(O, unite, O, teta, phy, mu)); facette[4][1] = coordl_P( Grx(x, y, z, teta, phy, mu) + Grx(unite. unite, O, teta. phy, mu), Gry(x. y, z, teta. phy, mu) + Gqy(unite, unite, O. teta. phy, mu), Grz>x, y, z. teta, phy, mu) + Grz(unite, unite, O, teta. phy, mu)); facette[4][2] := coord2 P( Grx(x, y, z. teta, phy, mu) + Grx(unite, unite, O, teta, phy, mu), TABLEAU VI Gry(x, y, z, teta, phy, mu) + Gry(unite, unite, O, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(unite. unite, O, teta. phy, mu)); if sing then setfillstyle( 1, color) else setfillpattern(gris 1, color); fillpoly(4, facette); end, PROCEDURE facette3(x, y, z, teta. phy, mu: real: color. word; sing: boolean); begin facette(l[l] = coordlP( Grx(x, y, z. teta, phy, mu) + Grx(unite. unite, O, teta. phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, unite. O, teta. phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, unite. O, teta. phy, mu) ); facette([l][2] = coord2_P( Grx(x. y, z, teta. phy, mu) + Grx(unite, unite, 0, teta, phy, mu), Gry(x, y, z. teta, phy, mu) + Gry(unite. unite. 0. teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, unite, O, teta, phy, mu)); facette[2][1] = coordlP( Grx(x. y, z, teta, phy, mu) + Grx(unite, unite, unite, teta. phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite. unite, unite, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, unite, unite, teta. phy, mu)); facette[2][2] := coord2 P( Grx(x, y, z, teta, phy, mu) + Grx(unite, unite. unite, teta. phy, mu), Gry(x. y, z, teta, phy, mu) + Gry(unite, unite, unite, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, umnite, unite, teta, phy, mu)); facette[3][1] = coordl_P( Grx(x, y, z, teta, phy, mu) + Grx(O, unite, unite, teta. phy, mu), Gry(x. y, z. teta, phy, mu) + Gry(O. unite. unite, teta. phy, mu), Grz(x, y, z. teta phy, mu) + Grz(O, unite, unite, teta, phy, mu); facette[3][2] := coord2-P( Grx(x. y, z. teta, phy, mu) + Grx(O, unite, unite, teta. phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(O, unite, unite, teta, phy, mu), Grz(x. y, z, teta. phy, mu) + Grz(O, unite, unite, teta. phy, mu)); facette[4][1] := coordl P( Grx(x, y, z, teta, phy, mu) + Grx(O, unite, O, teta. phy, mu), Gry(x, y, z. teta. phv, mu) + Gry(O, unite, O, teta. phy, mu), Grz(x. y, z. teta. phy, mu) + Grz(O, unite. O, teta, phy, mu)); facette[4][2] := coord2 P( Grx(x, y, z, teta. phy, mu) + Grx(O, unite. O, teta, phy, mu), Gry(x, y, z, teta. phy, mu) + Gry(O. unite, O, teta. phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(O, unite. O, teta, phy, mu)); if sing then {t setfillpattem(gris3, color) } setfillstyle( 1, color) else setf1i1style(l 1, color); fillpoly(4, facette); end; PROCEDURE facette4(x, y, z. teta. phy, mu: real; color word; sing: boolean); begin tfacette[l] [l] := coordl P( Grx(x. y, z. teta. phy, mu) + Grx(unite, O, O, teta. phy, mu), Gry(x, y, z, teta. phy, mu) + Gry(unite. O. O, teta, phy, mu), TABLEAU VII Grz(x, y, z, teta, phy, mu) + Grz(unite, O, O, teta, phy, mu)); facette[l] [2] := coord2_P( Grx(x. y, z, teta, phy, mu) + Grx(unite, O, O, teta, phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(unite, O, O, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(unite, O, O, teta, phy, mu)); facette(21[1] := coordlP( Grx(x, y, z, teta, phy, mu) + Grx(unite, O, unite, teta, phy, mu), Gry(x, y, z. teta, phy, mu) + Gry(unite, O, umnite, teta, phy, mu), Grz(x, y, z. teta phy, mu) + Grz(unite, O, unite, teta, phy, mu)); facette[2][2] := coord2_P( Grx(x. y, z, teta, phy, mu) + Grx(unite, O, unite, teta, phy, mu), Gry(x, y, z. teta, phy, mu) + Gry(unite, O, unite, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(unite, O, unite, teta, phy, mu) ); facette[3][1] := coordlP( Grx(x, y, z, teta, phy, mu) + Grx(O, O, unire, teta. phy, mu), Gry(x, y, z. teta, phy, mu) + Gry(O, O, unite, teta, phy, mu), Grz(x. y, z. teta, phy, mu) + Grz(O, O, unite, teta, phy, mu)); facette[3][2] := coord2_P( Grx(x, y, z, teta, phy, mu) + Grx(O, O, unite. teta, phy, mu, Gry(x. y. z. teta. phy, mu) + Gry(O, O, umnte, teta, phy, mu), Grz(x, y, z, teta. phy, mu) + Grz(O, O, unite, teta, phy, mu)); facette[4][1] := coordl_P( Grx(x, y, z, teta, phy, mu) + Grx(O, 0, O0, teta. phy, mu), Gry(x, y, z. teta. phy, mu) + Gry(O, O, O. teta, phy, mu), Grz(x. y, z. teta. phy, mu) + Grz(O, 0, 0, teta, phy, mu)); facette[4][2] := coord2_P( Grx(x, y, z. teta, phy, mu) + Grx(O. O. O, teta. phy, mu), Grytx, y, z, teta, phy, mu) + Gry(O, 0, 0, teta. phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(O. O. O, teta, phy, mu)) ; if sing then { setfillpattem(gris3, color) } setfillstyle( 1, color) else setfillstvle( 1 l,color); fillpoly(4, facette); end: PROCEDURE facette6(x, y, z. teta. phy, mu: real; color word; sing: boolean); begin facette[l] [1] := coordl_P( Grx(x, y, z. teta, phy, mu) + Grx(O, O, O, teta. phy, mu) , Gry(x. y, z, teta. phy, mu) + Gry(O, O, O, teta, phy, mu), Grz(x. y, z, teta. phy, mu) + Grz(O, O, O, teta. phy, mu)); facette[l1][2] := coord2_P( Grx(x, y, z. teta, phy, mu) + Grx(O, O, O. teta, phy, mu), Gry(x, y, z. teta. phy, mu) + Gry(O, O, O, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(O, O, O, teta. phy, mu)); facette[2][1] := coordl_P( Grx(x. y, z. teta, phy, mu) + Grx(O, unite. O. teta. phy, mu), Gry(x. y, z. teta. phy, mu) + Gry(O, unite, O. teta. phy, mu), Grz(x, y, z. teta, phv, mu) + Grz(O. unite. O, teta, phy, mu)); facette[2][2] := coord2 P( Grx(x, y, z. teta, phy, mu) + Grx(O. unite, O, teta, phy, mu), Gry(x. y, z, teta, phy, mu) + Gry(O, unite, O, teta, phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(O, unite, O, teta. phy, mu)); facette[3][1] = coordl_P( Grx(x, y, z. teta. phy, mu) + Grx(O, unite. unite, teta. phy, mu), Gry(x. y, z. teta, phy, mu) + Gry(O. unite. unite. teta. phy, mu), Grz(x. y, z. teta. phy, mu) + Grz(O. unite, unite, teta. phy, mu)); facette[3][2] = coord2-P( Grx(x. y, z. teta, phy, mu) + Grx(O. unite, unite, teta, phy, mu), TABLEAU VIII Gry(x. y, z, teta, phy, mu) + Gry(O, unite, unite, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(O, unite, unite, teta, phy, mu) ); facette[4] [1] := coordl_P( Grx(x, y, z, teta, phy, mu) + Grx(O, O, unite, teta, phy, mu), Gry(x. y, z, teta, phy, mu) + Gry(O, O, unite, teta, phy, mu), Grz(x, y, z, teta, phy, mu) + Grz(O, O, unite, teta, phy, mu) ); facette[4][21:= coord2_P( Grx(x, y, z, teta, phy, mu) + Grx(O, O, unite, teta, phy, mu), Gry(x, y, z, teta, phy, mu) + Gry(O, 0, unite, teta. phy, mu), Grz(x, y, z. teta, phy, mu) + Grz(O, O, unite, teta, phy, mu)); if sing then {t setfillpattem(gris 1, color) } setfillstyle( 1, color) else setfillpattern(gris5. color); fillpoly(4, facette); end; PROCEDURE cube(x. y, z, teta, phy, mu: real; color: word; sing boolean); begin if Gry(O. O, 1, teta. phy, mu) > O then facettel(x, y, z, teta, phy, mu, color. sing) else facette6(x, y, z, teta, phy, mu, color, sing); if Gry( 1, O, O, teta, phy, mu) > O then facette2(x, y, z, teta. phy, mu, color, sing) else facette5(x, y, z, teta, phy, mu, color, sing); if Gry(O. 1, 0. teta. phy, mu) > O then facette3(x. y, z, teta, phy, mu. color, sing) else facette4(x. y, z. teta. phy, mu. color, sing); end; FUNCrION bord(x. y, z: real; signe: typ_bord): boolean; begin if signe = pos then bord:= (f(x, y,z)≥O)and ( (f(x+stepl, y, z)≤ O) or (f(x-step_l, y, z) ≤ O) or (f(x, y-stepl, z)≤ O) or (f(x, y+stepl, z) ≤ O) or (f(x, y, z+step_l) ≤ O) or (f(x, y, z-step_l) ≤ O)) else bord:= (f(x, y, z) ≤ O) and ((f(x+step_l, y, z) ≥ O) or (f(x-stepl, y, z) ≥ O) or (f(x. y-step_l, z) ≥ O) or (f(x, y+step_l, z) ≥ O) or (f(x, y, z+stepl) ≥ O) or (f(x. y, z-step_l) ≥ O)); end: TABLEAU IX PROCEDURE dessbord(neg.._pos: typbord; trait, voirsommtriedr, voir_sing: boolean); var x, y, z: real; begin if (Gry(0. 0, 1, teta, phy, mu) 0) and (Gry(0, 1, 0, teta, phy, mu) > 0) then begin x:= maxxdetect + 10*stepl; v = mnv_detect - 10*stepl; z:= minzdetect - 10*step1; while z ≤ maxx_detect + 10*stepl do begin y:= minydetect - 10*step_l; while y ≤ maxydetect + 10*stepl do begin x:= maxx_detect+ 10* stepl; while x ≥ minxdetect - l0*stepl do begin if bord(x, y, z. neg_pos) then case voirsing of false: if voir sommtnriedr then begmin if (not trait) or not sommet_triedre(x. y, z, neg_pos)) then cube(unite*(x-origine 1)/stepl, unite* (y-origine2)/step_l, unite*(z-origine3)/stepj, teta, phy, mu, colorl, false) else if trait then [alors sommettriedre} cube(unite*(x- originel)/stepj, umnite*(y-origine2)/step_, umnite*(z-origine3)/step l, teta, phy, mu. colorl. true); end else cube(unite*(x-origine l)/stepl., unite*(y-origine2)/step_l, unite*(z-origine3)/stepl, teta, phy, mu. colorl, false); true: if (not trait) or (not sommet triedre(x, y, z. negpos)) then if loc_surf_def(x, y, z. trait, negpos) then cube(unite*(x-origine 1)/stepl, unite*(y-origine2)/step1, unite*(z-origine3)/stepl, Teta. phy, mu. colorl., false) else cube(unite*(x-origine l)/stepl, unite*(y-origine2)/step_1, unite*(zorigine3)/stepl, teta. phy, mu. colorl, truc) end; x:= x-stepl; end; y:= y+stepl; end: z:= z+stepl; TABLEAU X end; end else begin sound(220); delay(500); nosound: end; end; PROCEDURE cadrer_bord(neg_pos: typbord); var x, y, z: real; begin flag:= false; x:= xmnax; y:= ymin; z:= zmnin; maxxdetect:= xmin; minxdetect:= xmax; maxydetect:= ymin;: rminvdetect:= ymax; maxzietect:= zmax; minzdetect:=zmin; while z ≤ zmax do begin y:= ymin: while y ≤ ymax do begin x:= xmax: while x ≥ xmin do begin if bord(x, y, z, negpos) then begin if x > maxxdetect then maxxdetect:= x; if y > maxyvdetect then maxydetect:= y; if z > maxzdetect then maxzdetect:= z: if x TABLEAU XI origine3:= (maxzmdetect + minzdetect)f2; end: [of procedure cadrer bord int} begin initialisation; if (Gry(0, 0, l, teta, phy, mu) 0) and (Gry(0, 1, 0, teta, phy, mu) > 0) then begin cadrerbord(neg); dessbord(neg.pos, traitement, voirsomrnm_triedr, voirtsing); end else begin sound(440); delayt500); nosound; end; readln; end. REVENDICATIONS 1.-Procédé de traitement de données, caractérisé : en ce qu'il consiste en la description automatisée des points du carré des neuf pixels, ou des points du cube des vingt-sept voxels qui appartiennent, respectivement, au bord d'un objet plan ou à l'enveloppe d'un objet solide. 2.-Procédé selon la revendication 1, caractérisé : en ce qu'un outil d'automatisation de la dite description comprend un logiciel et un ordinateur.