Connectés : 1
pFwiki
::
abstract
www!k! v.20110820
|
pages
|
skin
|
login
|
code
! BETTER WITH JAVASCRIPT !
pFwiki
|
_h1 LES FORMES PASCALIENNES _center{_show{http://ensam.wiki.free.fr/S9/morpharchi_2011-12/data/immersions_.jpg|500|800|Immersion d'une pL4 (cubique) et d'une pS22 (quadrangle) dans une biquadrique (pS33)} _show{data/tears_20111211.jpg|282|800|composition à partir d'éléments de pSurface immergés dans une boite de déformation} } _h3 INTRODUCTION _p Ce qui suit est une présentation rapide de l'approche des formes gauches par une famille de formes appelées pFormes ou "formes pascaliennes". Les pFormes tentent de construire de façon synthétique, cohérente et progressive les formes classiques de la géométrie (segments, facettes, cubes, cylindres, tores, ...) et celles plus récentes manipulées dans les outils numériques (Bézier, splines, Nurbs, Coons). _p Une présentation détaillée est accessible à cette adresse [[http://amartyfree.free.fr/pF_epsilon/|http://amartyfree.free.fr/pF_epsilon/]]. Le présent document se trouve à l'adresse : [[http://marty.alain.free.fr/pFwiki/index.php?view=abstract|http://marty.alain.free.fr/pFwiki/index.php?view=abstract]]. Un document pdf (6.5Mo) est également téléchargeable à cette adresse : [[http://marty.alain.free.fr/recherche/pformes/pFbook.pdf|http://marty.alain.free.fr/recherche/pformes/pFbook.pdf]]. _p Sommaire : _ul Introduction _ul Formes multilinéaires _ul Diagonalisation _ul Définition d'une pForme _ul Immersion _ul Exploration Numérique _ul Conclusion _h3 A) FORMES MULTILINEAIRES _p On travaille dans l'espace des points de R4. _p 1) Deux points P0 et P1 étant donnés, on définit un segment pL2 = [P0,P1] comme l'ensemble des points satisfaisant à : _pre{ pL2(u) = (1-u)•P0 + u•P1 avec u € [0,1] } _p 2) Deux segments pL2_0 et pL2_1 étant donnés, on définit une facette gauche pS22 = [pL2_0,pL2_1] comme l'ensemble des points satisfaisant à : _pre{ pS22(u,v) = (1-v)•pL2_0(u) + v•pL2_1(u) avec pL2_0(u) = (1-u)•P00 + u•P01 pL2_1(u) = (1-u)•P10 + u•P11 u,v €[0,1] soit pS(u,v) = (1-v)(1-v)•P00 + (1-v)u•P01 + v(1-u)•P10 + vu•P11 avec u,v €[0,1] } _p 3) Deux facettes pS_0 et pS_1 étant données, on définit un cube gauche pV222 = [pS22_0,pS22_1] comme l'ensemble des points satisfaisant à : _pre{ pV222(u,v,w) = (1-w)•pS22_0(u,v) + w•pS22_1(u,v) avec pS22_0(u,v) = (1-v)(1-v)•P000 + (1-v)u•P001 + v(1-u)•P010 + vu•P011 pS22_1(u,v) = (1-v)(1-v)•P100 + (1-v)u•P101 + v(1-u)•P110 + vu•P111 u,v €[0,1] soit pV222(u,v,w) = (1-w)(1-v)(1-v)•P000 + … + wvu•P11 avec u,v,w €[0,1] } _p 4) On pourrait de même définir un hyper-cube gauche et ainsi de suite, construisant ainsi un ensemble de formes multilinéaires de dimension croissante. _h3 B) DIAGONALISATION _p 1) Considérant la facette gauche pS22 et l'ensemble des points repectant l'égalité u == v, on met en évidence une courbe diagonale reliant deux des points opposés de la facette : _pre{ pS22(u,u) = (1-u)^2•P00 + (1-u)u•(P01 + P10) + u^2•P11 avec u €[0,1] pL3(u) = (1-u)^2•P0 + 2(1-u)u•P1 + u^2•P2 avec u €[0,1] où P0 = P00 P1 = (P01+P10)/2 P2 = P11 } _p La _b{"diagonalisation"} d'une pS22 produit ainsi une courbe de degré deux contrôlée par trois points. Ce qui nous conduit vers de nouvelles constructions. _p 2) _b{Deux paraboles pL3_0 et pL3_1} étant données, on définit une surface pS23 = [pL3_0,pL3_1] comme l'ensemble des points satisfaisant à : _pre{ pS23(u,v) = (1-u)•pL3_0(v) + u•pL3_1(v) = (1-u)[(1-v)^2•P00 + 2*(1-v)v•P01 + v^2•P02] + u[(1-v)^2•P10 + 2*(1-v)v•P11 + v^2•P12] } _p Cette surface peut être vue (par transposition) comme interpolation quadratique de trois segments : _pre{ pS32(u,v) = (1-u)^2•pL2_0(v) + 2*(1-u)u•pL2_1(v) + u^2•pL2_2(v) = (1-u)^2[(1-v)•P00+v•P10] + 2*(1-u)u[(1-v)•P01+v•P11] + u^2[(1-v)•P02+v•P12] } _p Et la diagonale de cette surface est une cubique : _pre{ pL4(u) = (1-u)^3•P0 + 3(1-u)^2u•P1 + 3(1-u)u^2•P2 + u^3•P3 avec u€[0,1] où PO, P1, P2 et P3 s'expriment en fonction des 2x3 points Pij définissant la pS23 } _p 3) _b{Trois paraboles pL3_0, pL3_1 et pL3_2} étant données, on définit une surface pS33 = [pL3_0,pL3_1,pL3_2] comme l'ensemble des points satisfaisant à : _pre{ pS33(u,v) = (1-u)^2•pL3_0(v) + 2*(1-u)u•pL3_1(v) + u^2•pL3_2(v) = ... } _p Et la diagonale de cette surface est une pL5 : _pre{ pL5(u) = (1-u)^4•P0 + 4(1-u)^3u•P1 + 6(1-u)^2u^2•P2 + 4(1-u)u^3•P3 + u^4•P4 où PO, P1, P2, P3 et P4 s'expriment en fonction des 3x3 points Pij définissant la pS33 } _p 4) _b{De façon générale}, la "diagonalisation" d'une forme multilinéaire produira une forme de dimension inférieure et de degré supérieur. Par exemple, la "diagonale première" d'un cube gauche pV222 est une surface pS23 interpolant linéairement deux paraboles et sa "diagonale seconde" pL4 une cubique construite sur quatre points satisfaisant l'expression : _pre{ pL4(u) = (1-u)^3•P0 + 3(1-u)^2u•P1 + 3(1-u)u^2•P2 + u^3•P3 avec u€[0,1] } _h3 C) DEFINITION D'UNE pFORME _p On notera que les coefficients de l'expression d'un segment pL2, d'une parabole pL3 et d'une cubique sont les coefficients du Triangle de Pascal : [1,1], [1,2,1], [1,3,3,1]. De façon générale, on appellera "pForme" toute forme satisfaisnt : _pre{ pF = ∑( ki•pFi ) où ki sont les coefficients du triangle de Pascal, ∑(ki) = 1 pFi sont soit des pFormes de dimension inférieure, soit des points. } _p _b{Note} : en fait d'autres combinaisons linéaires seront également acceptables, par exemple : _pre{ pS = 2•pS1 - pS2 # surface symétrique ( 2-1 = 1 ) pS = pS1 + pS2 - pS3 # surface de Coons ( 1+1-1 = 1 ) ... } _p La condition nécessaire restant que la somme des coefficients soit toujours égale à 1. _p On dispose maintenant d'un processus qui étend la famille initiale des formes multilinéaires au cas de formes non-linéaires, les pFormes. Inversement, on peut s'attendre à ce que toute pForme non linéaire puisse être considérée comme diagonale ultime d'une forme multilinéaire. Par exemple : _pre{ - pL3 = diag( pS22 ) # diagonale première d'une facette gauche - pL4 = diag( pS23 ) = diag( pV222 ) # diagonale seconde d'un cube gauche - pL5 = diag( pS33 ) = diag( pV223 ) = diag( pH2222 ) # diagonale troisième d'un hypercube gauche - pL6 = ... } _h3 D) IMMERSION _p 1) La diagonale d'une pS22 est une pL3. Considérée "en local" dans la pS22, la diagonale est assimilable à un segment de droite reliant deux sommets opposés de la surface. Il est facile de construire une pS22 réduite sur deux points quelconques de la pS22 et de tracer la diagonale les reliant, conduisant au concept de pSegment immergé dans la pS22, que l'on écrira ipL2 / pS22. On peut montrer que : _pre{ - ipL2 / pSmn - > pLN de l'espace avec N-1 = (m-1) + (n-1) Exemples : - ipL2 / pS22 = pL3, - ipL2 / pS23 = pL4, - ipl2 / pS33 = pL5, - … } _p Ce résultat peut être étendu au cas d'un pSegment immergé dans une pForme quelconque : _pre{ - ipL2 / pFmi - > pLN de l'espace avec N-1 = ∑ (mi-1) } _p 2) L'immersion d'un segment dans une pForme est une opération interne, on reste en famille. On se propose d'étendre cette propriété à l'immersion de toute pForme dans une pForme : _pre{ - ipF / pF - > pF # toute pForme immergée dans une pForme est une pForme } _p _b{Pour l'instant, cette propriété reste une conjecture à démontrer}. Les explorations numériques qui ont conduit aux sorties graphiques en annexe semblent confirmer les affirmations suivantes : _pre{ - ipLq / pSmn - > pLN de l'espace avec (N-1) = (q-1)*[ (m-1) + (n-1) ] - ipSab / pSmn - > pSMN de l'espace avec (M-1) = (a-1)*[ (m-1) + (n-1) ] et (N-1) = (b-1)*[ (m-1) + (n-1) ] Exemples : - ipL2 / pS22 - > pL3 # (3-1) = (2-1)*[ (2-1) + (2-1) ] = (2-1) * 2 - ipL3 / pS22 - > pL5 # (5-1) = (3-1)*[ (2-1) + (2-1) ] = (3-1) * 2 - ipL4 / pS22 - > pL7 # (7-1) = (4-1)*[ (2-1) + (2-1) ] = (4-1) * 2 - ipL5 / pS22 - > pL9 # ... - ipL2 / pS33 - > pL5 # (4-1) = (2-1)*[ (3-1) + (3-1) ] = (2-1) * 4 - ipL3 / pS33 - > pL9 # (9-1) = (3-1)*[ (2-1) + (2-1) ] = (3-1) * 4 - ipL4 / pS33 - > pL13 # (13-1)= (4-1)*[ (2-1) + (2-1) ] = (4-1) * 4 - ipL5 / pS33 - > pL17 # ... - ipS22 / pS22 - > pS33 # (3-1) = (2-1)*[ (2-1) + (2-1) ] - ... } _p Réciproquement, pour toute pForme de l'espace il est possible de définir une pForme dans laquelle elle sera réduite à un pSegment. On pourrait relier cette approche au problème "funiculaire" fondamental de la Physique Mathématique : « _i{Il existe un "espace gauche" dans lequel peut être annulée toute distribution de force/Energie de notre espace} ». Et peut-être remplacer le travail sur les monstres mathématiques que sont les géodésiques parcourant des espaces métriques par des animaux plus gentils peuplant les espaces affines. _h3 E) EXEMPLE D'EXPLORATION NUMERIQUE _p Les deux images en tête du document illustrent l'exploration numérique qui a été engagée sur la base de scripts écrits dans le langage RUBY embarqué dans le logiciel en libre accès Sketchup 3D. La dernière mouture (14/12/2011) du script se trouve dans un dossier PF librement [[téléchargeable|http://ensam.wiki.free.fr/S9/morpharchi_2011-12/data/PF.zip]] (20ko). Placer le dossier "PF" décompressé dans le dossier "Plugins" de Sketchup. Taper _b{load "PF/pFtests.rb"} dans la console Ruby, puis _b{exemple}. _h6 1) Immersion d'une pL4 dans une pS44 _p On construit successivement : _ul une pSurface contrôlée par 3x3 = 9 points (biquadrique) _ul une pCourbe contrôlée par 4 points (cubique) _p On immerge la pCourbe dans la pSurface pour obtenir une pCourbe de l'espace contrôlée par 13 points. _pre{ def ipLq_in_pSmn() # 1) définition d'un tableau de 3 paraboles : s = [ [ [ 0.0, 0.0, 0.0], [360.0, 0.0, 360.0], [360.0, 0.0, 0.0] ], [ [ 0.0, 180.0, 360.0], [ 0.0, 180.0, 0.0], [360.0, 180.0, 0.0] ], [ [ 0.0, 360.0, 360.0], [360.0, 360.0, 0.0], [360.0, 360.0, 360.0] ] ] pSmn = PF.new( s ) # définition de la pSmn, une pS33 pSmn.build( [3,3] ) # subdivision récursive niveau 3 - > maillage 17x17 pSmn.draw( "S" ) # affichage # 2) définition d'un tableau de 4 points : p = [ [ 1.0/8, 1.0/8, 0.0 ], [ 4.0/8, 7.0/8, 0.0 ], [ 7.0/8, 4.0/8, 0.0 ], [ 7.0/8, 6.0/8, 0.0 ] ] # 3) affichage du polygone de contrôle immergé for i in (0..p.length()-2) ipL2 = ipL2inpS( p[i], p[i+1], pSmn ) # définition d'un segment immergé ipL2.build( 3 ) # subdivision récursive niveau 3 ipL2.draw( "L" ) # affichage du segment end # 4) immersion et affichage de la ipLq ipLq = PF.new( p ) # définition de la pL4 pLq = pSmn.immersion( ipLq ) # immersion de la ipL4 - > pL13 pLq.build( 0 ) pLq.draw( "L" ) # affichage du polygone de contrôle de l'espace pLq.build( 5 ) # subdivision récursive niveau 5 pLq.draw( "P" ) # affichage de la pL13 end } _h6 2) Immersion d'une coque (pVolume) dans une boite de déformation (pVolume) _p On construit successivement : _ul une pSurface (pS45) reconstituant un quart de cylindre localement déformé. _ul une pSurface parallèle et un pVolume représentant une coque épaisse, soit au total 4x5x2 = 40 points de contrôle _ul une boite cubique à partir de trois facettes gauches _p En immergeant le quart de cylindre dans la boite, on peut déformer globalement et de façon cohérente un pVolume défini par 40 points en jouant sur les12 points de contrôle de la boite cubique. _pre{ def dbox( delta = 0.5, # amplitude de la perturbation sur la section ep = 0.04, # épaisseur de la coque ff = [1.0, 1.0, 0.5, 0.5] ) # cadres de déformation de la boite (carrés) k = 1 # 1.0/2.54 # coefficient Sketchup : 1 cm/1 pouce # 1) LA SURFACE sss = [] # 4 quasi arc de cercle 45° de rayon 1 for i in (0..3) do # + déplacement horizontal du point médian y = 1.0/3*i # longueur unité divisée par 3 dd = (i==0 _!!||!!_ i==1)? delta : 0.0 sss[i] = [ [y, 1.0, 0.0], [y, 1.0, 0.25], [y, 1+dd, 0.5], [y, 0.875, 0.625], [y, 0.75, 0.75] ] end pS = PF.new( sss ) # 2) LA BOITE DE DEFORMATION n = ff.length() sss = [] for i in 0..n-1 do uu = 1.0 * i / (n-1) sss[i] = [ [ [uu,0.0,0.0], [uu,ff[i],0.0] ], [ [uu,0.0,ff[i]], [uu,ff[i],ff[i]] ] ] end boite = PF.new( sss ) boite.transpose() boite.scale( [k,-k,k] ) boite.rotate( [-90,0,0] ) boite.build( 0 ) boite.draw( "L" ) # affichage des lignes de contrôle # 3) IMMERSION DE LA COQUE DANS LA BOITE DE DEFORMATION coque_ext = boite.immersion( pS ) coque_in = coque_ext.parallel( -k*ep ) # création de l'intrados coque = PF.new( [ coque_ext.poles(), coque_in.poles() ] ) # création de la coque coque.build( [0,1,1] ) # subdivision de la surface coque.draw( "V" ) # affichage 6 faces end } _h3 CONCLUSION _p Dans l'état actuel il semble acquis que le cas le plus simple d'immersion, la diagonalisation, est une opération interne, et qu'un iSegment est bien une pForme. Au delà du iSegment, le caractère interne de l'opérateur "immersion" reste à démontrer. De plus l'algorithme conduisant aux points de contrôle fait intervenir des inversions de matrices dont on se passe complètement dans le cas du iSegment. _p La question reste donc bien : _ul de découvrir l'approche qui permettra de démontrer la conjecture sur l'immersion d'une ipForme dans une ipForme, _ul et de construire les points de contrôle de la pCourbe équivalente de l'espace. _p En espérant que la solution existe et qu'elle peut s'exprimer dans un langage mathématique accessible. _p _i{alain marty le 19/12/2011} _center{_show{http://ensam.wiki.free.fr/S9/morpharchi_2011-12/data/pL5_cercle_oeil.jpg|500|700|Une courbe construite sur une combinaison paramétrique polynomiale de degré 4 dont les coeeficients sont [1,4,6,4,1] (vous souvenez-vous du triangle de Pascal ?) et jouant avec des points judicieusement positionnés dans un espace quadri-dimensionnel a l'heureuse propriété de se projeter dans notre espace sous la forme d'un cercle. Magnifique !} _br{}Le cercle est la projection dans R3 d'une pL5(t) de R4, avec t €[-k,1+k] et k = sqrt(2) }