Approximation de surfaces développables pour la modélisation d’objets 3D Gilles LAURENT (MMIS MCS - 2A Ensimag) Mai 2012 Résumé Nous considérons le problème suivant : construire une surface développable 3D quand on connait uniquement son bord. Nous créons pour cela un maillage à partir d’une discrétisation de la courbe du bord, et nous modifions les points intérieurs à l’aide d’une méthode d’optimisation pour rendre le maillage développable. Après plusieurs subdivisions, le maillage obtenu est proche d’une surface développable. 1 Introduction Une surface développable est une surface qui peut être mise à plat sans distorsion de la surface. Il est très peu probable qu’une surface prise au hasard ait la propriété d’être développable. Or de telles surfaces modélisent parfaitement les tissus, le cuir et les métaux par exemple. Elles présentent donc un intérêt tout particulier pour ces domaines de l’industrie, notamment en métallurgie où l’on déforme les tôles de métal pour former par exemple la coque d’un bateau. Notre travail a été motivé par le fait de reconstruire une surface développable à partir de la seule connaissance des bords de la surface. En effet, dans l’article [8], les chercheurs ont à leur disposition des capteurs sous formes de bandes qu’ils disposent sur une voile. Ils essayent ensuite d’interpoler la surface intérieure en utilisant un minimum de capteurs (ceux-ci étant très chers) et en ne connaissant que la courbe du bord de la voile. Or la voile étant un tissu, elle est développable. Ainsi, en interpolant la surface intérieure tout en respectant la propriété de développabilité, on cherche une modélisation proche de la réalité. Nous décrivons dans cet article une méthode pour interpoler une surface à partir des courbes du bord, avec la contrainte que la surface obtenue soit développable. Travaux existants Une surface est développable si sa courbure de Gauss est partout égale à zéro. L’approximation de telles surfaces par des maillages a déjà été traitée dans des articles connexes, où les maillages sont localement approchés par des surfaces réglées développables [4, 7, 16] (des morceaux de cylindres, de cônes). Dans ces méthodes, on transforme des maillages de manière locale. Dans le même ordre d’idées, dans l’article [10], on segmente un maillage de manière à ce que les différentes parties approchent des surfaces coniques (donc développables), et on tente ensuite de tranformer localement le maillage en véritable conique. Nous ne pouvons malheureusement utiliser ces approches locales que sur des formes bien particulières. D’autres approches travaillent sur une transformation globale du maillage, nous avons moins de contraintes sur les maillages que l’on peut optimiser. La courbure de Gauss est alors discrétisée en chaque point, puis l’on résout un système afin de rendre le maillage globalement développable [18]. C’est principalement sur cette idée que nous travaillons dans cet article. 2 Définitions, notations Nous allons présenter dans cette section les notions de maillage développable et de maillage laplacien. Le schéma de l’algorithme présenté utilisera ces deux notions. 1 2.1 Maillage développable On dit qu’un maillage M est développable si on peut l’aplatir, i.e. le transformer en un maillage D du plan, sans que la surface subisse de distorsion. Sans perte de généralité, on peut se contenter d’étudier les maillages qui sont des triangulations. Dans l’article [12] on définit la notion de developpablité discrète. Dans cet article, nous prendrons les notations suivantes : Figure 1: Illustration de l’angle intérieur du maillage (cf [17]) Notation • M = {P, E, F } un maillage. • P = {vi ∈ R3 , i ∈ V }, l’ensemble des points qui forment le maillage. • V l’ensemble des indices des points du maillage. • E = {(i, j) ∈ N2 } l’ensemble des arêtes du maillage. • F l’ensemble des faces du maillage. On considèrera dans la suite que toutes les faces sont des triangles. Notre maillage sera donc une triangulation. • Vint = {i tel que ∀j, (i, j) ∈ E ⇒ (i, j) appartient à exactement deux faces de F }, l’ensemble des indices des points intérieurs à M . • Vbord = V r Vint , l’ensemble des indices des points du bord du maillage. • N (vi ) = {j tel que (i, j) ∈ E}, l’ensemble des indices des points premiers voisins de vi dans M . • N (vp ) = {(i, p, j) ∈ N3 tel que le triangle 4vi vp vj ∈ F }, l’ensemble des faces adjacentes à vp . Définition 1 On note pour tout p ∈ Vint , θ(vp ) = X vi\ vp vi+1 (i,p,j)∈N (vp ) On dira que θ(vp ) est l’angle du point vp sur le maillage M . Propriété 1 Un maillage est développable, si et seulement si en tout point p ∈ Vint , θ(vp ) = 2π. En effet on dit qu’un maillage M est développable si et seulement si on peut trouver une déformation isométrique de R3 dans R2 . Les triangles du maillage applati sont donc semblables 2 aux triangles de M et ainsi la valeur des angles est préservée. Or les angles des points intérieurs d’un maillage plan sont tous égaux à 2π. Donc les angles des points intérieurs de M sont tous égaux à 2π. Nous n’avons ici qu’une condition nécessaire[18]. Pour avoir la réciproque il suffit que le maillage soit topologiquement équivalent à un disque, i.e. qu’il ne possède pas de trou et ne se replie pas sur lui-même. Propriété 2 Un maillage topologiquement équivalent à un disque est développable si et seulement si ∀p ∈ Vint , θ(vp ) = 2π. Pour rendre nos maillages développables, il nous suffira donc d’annuler en tout point du maillage la valeur de θ − 2π. Courbure de Gauss discrète réelle La courbure de Gauss discrète en un point vp n’est pas exactement égale à θ(vp ). En effet pour un maillage hexagonal (voir Figure 3)[2], on a : Définition 2 Pour tout vp , p ∈ Vint on appelle K6 (vp ) = 3 2π − θ(vp ) Aire(N (vp )) La courbure de Gauss discrète au point vp , pour un maillage 6-régulier. Où Aire(N (vp )) représente l’aire des triangles contenus dans le premier voisinage de vp . Définition 3 On dit qu’une surface est développable si sa courbure de Gauss est nulle en chacun de ses points. Ainsi la courbure de Gauss dépend fortement de la taille du maillage, car si les mailles sont 1 petites, Aire(N (vp )) deviendra très grand. Il peut donc y avoir une différence d’échelle importante entre θ(vp ) − 2π et K6 (vp ). Il faudra alors bien différencier le fait de minimiser la valeur de θ(vp ) − 2π ou bien minimiser la valeur de K6 (vp ). 2.2 Maillage laplacien Un maillage est dit laplacien si chacun de ses points est le barycentre de ses voisins, ce qui a donc un effet régularisant sur les points du maillage. A partir de cette interprétaion géometrique et d’après les articles [13, 9], on peut donner la définition suivante pour un maillage laplacien : Définition 2 On dit qu’un maillage est laplacien si, ∀vi ∈ M, vi − 1 |N (vi )| X vj = 0 (1) vj ∈N (vi ) où |N (vi )| est le cardinal de l’ensemble N (vi ). On peut également traduire cette relation sous la forme matricielle suivante : En notant, si(i = j) 1 −1 si(j ∈ N (vi )) Li,j = |N (vi )| 0 sinon 3 (2) et (xp )p , (yp )p , (zp )p , les coordonnées respectives des points (vp )p , l’équation (1) devient équivalente à Lx = 0 Ly = 0 (3) Lz = 0 On appelle alors L l’opérateur Laplacien. Propriété 3 Pour un maillage dont chacun des points est connexe, le rang de L est n − 1 où n est le nombre de points du maillage. L est quant à elle une matrice de dimension n ∗ n. En effet, si on note (xp )p ∈ Rn , le vecteur colonne des abscisses des points vp , et |N (vi )| si i = j −1 si j ∈ N (vi ) L̃i,j = 0 sinon Alors Lx = 0 ⇔ L̃x = 0 Par ailleurs, L̃ est symétrique et l’on a : X ∀x ∈ Rn , xT L̃x = (xi − xj )2 (i,j)∈E Ainsi, ∀x ∈ Rn , ⇒ ⇒ ⇒ ⇒ 0 0 0 0 0 = L̃x T =x P L̃x = (i,j)∈E (xi − xj )2 = (xi − xj ), ∀(i, j) ∈ ε = xi − x0 , ∀i donc ker L̃ ⊆ vect(ξ) où ξ = (1, . . . , 1)T . Réciproquement ξ ∈ ker L̃ donc ker L̃ = vect(ξ). Ainsi L, qui est de même rang que L̃, est de rang n − 1. Ainsi, nous avons un degré de liberté pour rendre un maillage laplacien et développable. 3 Algorithme de développabilité L’algorithme que nous avons créé est un algorithme itératif qui, à chaque itération, subdivise le maillage puis l’optimise pour le rendre développable. Pour réaliser l’étape d’optimisation, nous nous inspirons des résultats décrits dans les articles [18, 17]. Celle-ci se base principalement sur la méthode de Newton pour annuler une fonction. Or nous savons que cette méthode ne fonctionne que si l’on possède une donnée initiale proche de la solution finale. L’algorithme que nous proposons fournit donc un moyen d’obtenir ce “bon” maillage initial sans perdre en performance. En effet il est très facile de transformer des maillages de petite taille en maillages développables, car les matrices entrant en jeu s’inversent à moindre coût. Nous avons donc effectué cette démarche itérative dans l’espoir de trouver des maillages développables de plus en plus grands. Ainsi, au début de chaque itération, le maillage initial est le meilleur possible et la méthode Newton converge donc plus vite. 3.1 Principe de l’algorithme L’algorithme part d’une courbe qui est le bord du maillage que l’on souhaite rendre développable. On crée un premier maillage au centre. 4 On déplace ensuite les points du centre pour rendre le maillage le plus proche possible d’une surface développable. Cela peut se traduire de la façon suivante : • Nous voulons que la surface finale soit développable. • Nous voulons que la surface soit le plus lisse possible, on essaye donc d’obtenir un maillage laplacien. • Nous voulons que la surface soit assez proche de la surface initiale. Nous obtenons alors un maillage proche d’une surface développable. Dans un second temps, on subdivise le maillage, et on obtient un nouveau maillage initial. On réitère les étapes précédentes. 3.2 Obtention du maillage initial Figure 2: Création d’un patch de Coons, de dimension 25 ∗ 25, à partir de quatre courbes issues de la surface d’un cône Afin d’obtenir un premier maillage nous coupons la courbe initiale en quatre courbes P 1, P 2, Q1 et Q2 (Figure 2) et nous appliquons sur ces quatre courbes un patch de Coons[6]. Le maillage obtenu de cette facon est un maillage régulier. De plus pour effectuer notre triangulation, nous considèrerons le fait que chaque point a un premier voisinage hexagonal (Figure 3). Choisir un tel maillage nous permet d’assurer que la courbure de Gauss discrète converge, au fur et à mesure des subdivisions, vers la courbure de Gauss de la surface lisse limite [2]. 5 Figure 3: Maillage régulier dont chaque point intérieur possède un premier voisinage hexagonal 3.3 Déplacement des points intérieurs 3.3.1 Modélisation du problème Les trois conditions décrites précédemment sur le maillage à obtenir à chaque étape peuvent se traduire par la résolution du problème d’optimisation sous contrainte [11, 14] suivant : Trouver (v1 ∗, . . . , vn ∗) ∈ (R3 )n tels que φ(v1 ∗, . . . vn ∗) = min φ(v1 , . . . vn ) (v1 , . . . , vn ) ∈ (R3 )n θ(vi ) = 2π, ∀i ∈ Vint } (4) Où n = |Vint | est le nombre de points intérieurs du maillage et les (vi )i∈Vint sont les points intérieurs du maillage. φ est la fonction objectif que l’on cherche à minimiser. En effet, on veut approcher un maillage laplacien et être proche du maillage initial. C’est donc dans la fonction φ que l’on fait apparaitre ces contraintes. On pose donc : φ(v1 , . . . vn ) = ωLap JLap (v1 , . . . vn ) + ωP os JP os (v1 , . . . vn ) (5) Où ωLap et ωP os sont les poids des différentes fonctions que l’on cherche à optimiser. On pose également : JLap (v1 , . . . vn ) = 1 X kLvi k2 2 (6) i∈Vint Minimiser cette fonction revient donc à essayer d’être le plus proche possible d’un maillage laplacien. 1 X JP os (v1 , . . . vn ) = kvi − v0i k2 (7) 2 i∈Vint v0i Où représente la position du point d’indice i dans le maillage initial. Ainsi, minimiser cette fonction revient à rester le plus proche possible du maillage initial. On a choisi les coefficients ωLap = 100.0 et ωP os = 1.0, ainsi on privilégie le fait d’avoir un maillage laplacien plutôt que de rester proche du maillage initial. Cela se justifie car le maillage initial ne représente pas grand chose, il est choisi arbitrairement. Il n’est donc pas nécessaire que la surface finale s’en rapproche trop. Nous sommes cependant obligés de garder le terme JP os pour pouvoir, par la suite, inverser la matrice hessienne de φ, puisque nous avons vu que la matrice L n’est pas inversible. 6 3.3.2 Résolution du problème Pour résoudre un problème d’optimisation sous contrainte, il suffit de trouver le minimum de la fonction lagrangienne [11, 14] J donnée par : X J(v1 , . . . vn , λ1 , . . . , λn ) = φ(v1 , . . . vn ) + λi (θ(vi − 2π) (8) i∈Vint Où λ = (λ1 , . . . , λn ) ∈ Rn et sont appelés les multiplicateurs de Lagrange. Il nous faut donc annuler ∇J afin de trouver le minimum de J. Or comme ∇J est une fonction de (R3 )n × Rn dans R4n , on peut calculer ses zéros grâce à la méthode de Newton. Celle-ci s’écrit alors à chaque itération k : ∇2 J(Xk )(Xk+1 − Xk ) = −∇J(Xk ) (9) Où ∇2 J est la matrice hessienne de J et Xk = (vk1 , . . . vkn , λk1 , . . . , λkn ), vki étant la position du ie point intérieur du maillage à la k e itération de la méthode de Newton. Algorithme de minimisation de courbure 1. tant que |J(Xk+1 ) − J(Xk )| > ε faire 2. Résoudre ∇2 J(Xk )Dk = −∇J(Xk ) 3. Xk+1 = Xk + αDk 4. fin tant que On fixe α = 0.25, ainsi nous assurons la stabilité de la méthode et nous avons un algorithme qui converge assez vite. On fixe également ε = 10−5 , de cette façon l’algorithme s’arrêtera lorsque les angles θ seront de l’ordre de 10−4 . Il s’agit d’un critère d’arrêt arbitraire, d’autant plus que la courbure de Gauss peut être beaucoup plus importante que cette valeur. On adaptera donc ce critère en fonction de la taille du maillage à optimiser. On note de plus Dk = Xk+1 − Xk . On peut alors écrire ∇J(Xk ) et ∇2 J(Xk ) sous la forme matricielle suivante : dx dy D= dz λ Φx Φy ∇J(Xk ) = Φz Ω H 0 0 ΘTx 0 H 0 ΘTy ∇2 J(Xk ) = 0 0 H ΘTz Θx Θy Θz 0 (10) (11) (12) A chaque itération de la méthode de Newton, on remet les λk1 , . . . , λkn à zéro, ce qui ne change pas la convergence de la méthode car la dépendance en lambda dans la fonction J est linéaire. Cela permet de simplifier les matrices ci-dessus : ΘT = ∇θ 7 (13) H = ωP os In + ωLap (LT L) (14) Φ = ∇φ (15) θ(v1 ) − 2π .. . θ(vn ) − 2π Ω= Calcul des dérivés de φ On a : ∂JP os (v1 , . . . , vn ) = vi − v0i ∂vi ∀i, ∂ 2 JP os (v1 , . . . , vn ) = δij I3 ∂vi ∂vj 1 0 0 1 si i = j Où δij = , et I3 = 0 1 0 0 sinon 0 0 1 ∀i, j, ∀i, ∀i, ∀i, j, ∂JLap (v1 , . . . , vn ) = LT Lvi ∂vi ∂ 2 JLap (v1 , . . . , vn ) = (LT L)i,j I3 ∂vi ∂vj ∀i, j, Donc (16) ∂φ (v1 , . . . , vn ) = ωP os (vi − v0i ) + ωLap (LT Lvi ) ∂vi ∂2φ (v1 , . . . , vn ) = (ωP os δij + ωLap (LT L)i,j )I3 ∂vi ∂vj (17) (18) (19) (20) (21) (22) Calcul du gradient de la courbure de Gauss : On note A : R3 × R3 −→ R la fonction qui à deux vecteurs associe leur angle. On a alors : A(x, y) = arccos ∂A ∂x (x, y) ∂A ∂y (y, x) = (y − = (x − hx, yi kxkkyk x x 1 √ kxk h kxk , yi) kxk2 kyk2 −hx,yi2 y y 1 √ kyk h kyk , xi) kyk2 kxk2 −hy,xi2 (23) (24) On remarque que l’on a alors : X ∀vi ∈ Vint , θ(vi ) = A(vk1 − vi , vk2 − vi ) (25) ∂A ∂A + (δ̃kj 2 − δ̃ij ) ∂x ∂y (26) (k1 ,k2 )∈N (vi ) Donc : Où δ̃ij 3.3.3 ∂θ (vi ) = ∂vj = 1 0 X (δ̃kj 1 − δ̃ij ) (k1 ,k2 )∈N (vi ) si i = j et vi ∈ Vint . sinon Amélioration de la résolution de la méthode de Newton Résoudre ∇2 J(Xk )(Dk ) = −∇J(Xk ) revient à inverser une matrice symétrique positive de dimension 4n ∗ 4n. La matrice ayant une forme très particulière, il est possible d’inverser cette matrice pour un coût bien inférieur à O((4n)3 ). En réalité on n’inverse pas la matrice mais on résout un système linéaire, ce qui réduit le coût de la résolution. D’après le livre d’algorithmique [5], on a : 8 Proprieté 4 Si la matrice A est symétrique positive telle que : B CT A= C D Alors, si C T est de rang maximal (A n’est pas nécessairement définie, elle peut être juste positive) alors A est inversible et on a : −1 B + B −1 C T S −1 CB −1 −B −1 C T S −1 −1 A = −S −1 CB −1 S −1 Où S = D − CB −1 C T est appelé le complément de Schur. S est alors définie positive. On peut donc appliquer ce résultat à notre problème en posant : H 0 0 B= 0 H 0 0 0 H Θx C = Θy Θz et D=0 On obtient alors les expressions suivantes : S = −Θx H −1 ΘTx − Θy H −1 ΘTy − Θz H −1 ΘTz (27) −1 H + H −1 ΘTx S −1 (Θx H −1 Φx + Θy H −1 Φy + Θz H −1 Φz ) − H −1 ΘTx S −1 Ω dx dy = H −1 + H −1 ΘTy S −1 (Θx H −1 Φx + Θy H −1 Φy + Θz H −1 Φz ) − H −1 ΘTy S −1 Ω dz H −1 + H −1 ΘTz S −1 (Θx H −1 Φx + Θy H −1 Φy + Θz H −1 Φz ) − H −1 ΘTz S −1 Ω (28) On ne calcule pas les λ car à chaque itération on leur affecte la valeur 0. On constate par ailleurs que la valeur de H est fixe et ne dépend que de la géométrie du maillage, on peut donc calculer H −1 avant de commencer les itérations. Algorithme minimisation de courbure, avec amélioration 1. calculer H −1 . 2. tant que |J(Xk+1 ) − J(Xk )| > ε faire 3. Calculer à l’aide de la formule ci-dessus dx , dy , dz 4. Xk+1 = Xk + αDk 5. fin tant que A chaque itération de cet algorithme, le coût en nombre d’opérations est donc en O(n3 ) voire O(n2.8 ) si l’on implémente l’algorithme de Strassen [5] pour le produit matriciel. Ici n est le nombre de sommets intérieurs. On gagne donc en rapidité de calcul. 9 (a) Maillage initial de taille 4 ∗ 4 (b) Maillage subdivisé une fois de taille 7 ∗ 7 (c) Maillage subdivisé deux fois de taille 13 ∗ 13 (d) Maillage subdivisé trois fois de taille 25 ∗ 25 Figure 4: Etapes de la subdivision de Catmull-Clark sur un maillage initial de taille 4 ∗ 4 (a) Courbe initiale de taille 4 ∗ 4 (b) Courbe interpolée une fois de taille 7 ∗ 7 (c) Courbe interpolée deux fois de taille 13 ∗ 13 (d) Courbe interpolée trois fois de taille 25 ∗ 25 Figure 5: Etapes de la subdivision de Catmull-Rom sur une courbe de bord initiale de taille 4 ∗ 4 3.4 Subdivision du maillage Une fois que l’on a obtenu un maillage suffisement développable, nous augmentons sa taille à l’aide d’une subdivision de Catmull-Clark (Figure 4)[1, 15]. On espère que le maillage issu de la subdivision n’augmente pas trop la courbure de Gauss par rapport au précédent maillage, on obtiendrait alors une bonne valeur initiale pour la méthode de Gauss à l’itération suivante. Nous ne nous contentons pas d’effectuer simplement une subdivision de Catmull-Clark car celle-ci implique de modifier la position des points du bord. Or nous nous somme fixé, comme contrainte de notre problème, de ne pas modifier les bords de la courbe initiale. Ainsi, les points du bords sont interpolés par une courbe de Cattmul-Rom (Figure 5)[3], afin d’obtenir un aspect plus lisse. En effet, si la surface présente des zones anguleuses (ce que l’on obtiendrait en prenant simplement le milieu des deux voisins) alors localement la courbure de Gauss risque d’être très élevée. Nous lissons donc les bords en interpolant la position des points ajoutés lors de la subdivision. Nous aurions aussi pu prendre des points issus d’une courbure initiale plus précise et ajouter les points du bord manquant pour notre subdivision mais cela implique d’avoir suffisemment de points de la courbe du bord. Nous espérons donc qu’avec cette subdivision la méthode de Newton des étapes suivantes convergera plus vite, i.e. avec moins d’itérations. Calcul du surcoût de la subdivision Nous avons vu précédemment que pour un maillage de taille mk ∗mk le coût d’une itération de la méthode de Newton est en O(mk2∗2.8 ). Supposons qu’à chaque étape de subdivision, nous effectuons le même nombre d’itérations que pour la méthode de Newton pour annuler ∇J (nous verrons que cette hypothèse se vérifie dans nos tests). Par ailleurs, avec les subdivisions successives, on peut affirmer que mk , la racine carrée de la taille du maillage à l’étape k, est mk = 2mk−1 − 4 = 2k (m0 − 2). 10 Alors, si Ck est le coût de l’algorithme à subdivisions, on a : Ck = O(m4.6 k ) + Ck−1 = O( k X k X m4.6 ) = O( 24.6i ) = O(24.6(k+1) ) i i=0 i=0 Or le coût de l’algorithme direct est 4.6k C̃k = O(m4.6 ) k ) = O(2 Ainsi les deux algorithmes s’exécutent avec le même ordre de grandeur de nombre d’opérations. Le surcoût engendré par les étapes de subdivisions est donc négligeable. On comparera donc la performance des deux algorithmes en se basant uniquement sur le nombre d’itérations effectuées au cours de la dernière étape d’optimisation. 4 Résultats Nous avons implémenté l’algorithme en C. Nous avons créé des structures de donnée propres au problème afin d’optimiser au maximum les temps de calcul. Nous avons testé le programme sur un PC de bureau (CPU Intel Core i3-300M + 4GB RAM) et les temps de calcul nous ont permis d’optimiser des maillage de taille 25*25 sans problème. L’exécution de l’algorithme sur 25*25 points n’excédant jamais plus de 5 min. Dans cette partie nous allons comparer les deux algorithmes : l’algorithme d’optimisation directe, et notre algorithme qui subdivise et optimise à chaque étape. Pour cela nous nous fixons comme objectif de rendre développable des maillages de taille 25 ∗ 25. Les maillages obtenus seront colorés avec une échelle de couleur logarithmique (Figure 6). Leur couleur représente la valeur locale de la courbure de Gauss sur ce maillage et non pas la valeur de θ (voir section 2, Courbure de Gauss discrète réelle). Dans les surfaces suivantes, les zones de Figure 6: Echelle de la mesure de la courbure de Gauss couleur bleue représentent des valeurs de courbure de Gauss de 10−5 il s’agit donc de surfaces quasi-développables, tandis que les zones rouges représentent des zones où la courbure de Gauss est de 10+1 il s’agit donc de surfaces peu développables. La plupart des zones seront de couleur verte correspondant à des valeurs de l’ordre de 10−2 pour la courbure de Gauss. Il s’agit de valeurs tout à fait correctes pour des maillages quasi-développables. 4.1 Comparaison de l’algorithme sur un maillage initial extrait d’un cylindre Pour le premier exemple, nous extrayons une courbe fermée sur un cylindre et nous appliquons les deux algorithmes pour tenter de former une surface développable à l’intérieur de cette courbe. Algorithme direct L’algorithme direct optimise un maillage de 25 ∗ 25 points (Figure 7). Pour l’algoritme direct, nous obtenons les resultats suivants : Etape d’optimisation Première étape (Figure 7(b)) Taille du maillage 25 ∗ 25 11 Nombre d’itérations 16 Courbure maximale finale 1.06.10−2 (a) Maillage 25*25 initial Courbure de Gauss < 9.36 (b) Maillage 25*25 optimisé Courbure de Gauss < 1.0610−2 Figure 7: Application de l’algorithme de développabilité en une seule étape (courbe de bord extraite d’un cylindre) Algorithme à subdivisions successives Dans notre algorithme, nous partons d’un maillage 4 ∗ 4 que nous optimisons à chaque itération, puis nous le subdivisons et nous recommençons ce processus jusqu’à optimiser un maillage 25∗25 (Figure 8). (a) Maillage 4*4 initial étape 0 Courbure de Gauss < 6.36.10−1 (b) Maillage 7*7 initial étape 1 Courbure de Gauss < 3.84 (c) Maillage 13*13 initial étape 2 Courbure de Gauss < 7.77 (d) Maillage 25*25 initial étape 3 Courbure de Gauss < 14.0 (e) Maillage 4*4 optimisé étape 0 Courbure de Gauss < 1.54.10−3 (f) Maillage 7*7 optimisé étape 1 Courbure de Gauss < 4.94.10−3 (g) Maillage 13*13 optimisé étape 2 Courbure de Gauss < 1.78.10−2 (h) Maillage 25*25 optimisé étape 3 Courbure de Gauss < 9.97.10−2 Figure 8: Application de l’agorithme de subdivision en quatre étapes (courbe de bord extraite d’un cylindre) A la fin de chaque étape de subdivision nous obtenons les résultats suivants : 12 Etape d’optimisation Taille du maillage Nombre d’itérations Courbure maximale finale Première étape (Figure 8(e)) 4∗4 22 1.54.10−3 Deuxième étape (Figure 8(f)) 7∗7 19 4.94.10−3 Troisième étape (Figure 8(g)) 13 ∗ 13 19 1.78.10−2 Dernière étape (Figure 8(h)) 25 ∗ 25 17 9.97.10−2 Sur cet exemple notre algorithme itère la méthode de Newton 17 fois sur un maillage 25*25. Algorithme direct sur le même bord que l’algorithme à subdivision Comme on utilise une subdivision de Catmull-Rom pour interpoler les bords du maillage dans notre algorithme, nous n’obtenons pas les même bords que ceux présentés dans le premier exemple. Nous allons donc appliquer l’algorithme direct sur un maillage 25 ∗ 25 ayant exactement les mêmes bords que l’algorithme à subdivision (Figure 9). Pour l’algorithme direct utilisé sur les mêmes bords que l’algorithme à subdivision, on obtient (a) Maillage 25*25 initial Courbure de Gauss < 23.5 (b) Maillage 25*25 optimisé Courbure de Gauss < 1.71.10−1 Figure 9: Application de l’agorithme en une seule étape sur un maillage 25 ∗ 25 dont les bords sont identiques à ceux de l’algorithme à subdivision (courbe de bord extraite d’un cylindre) les résultats suivants : Etape d’optimisation Première étape (Figure 9(b)) Taille du maillage 25 ∗ 25 Nombre d’itération 18 Courbure maximale finale 1.71.10−1 Récapitulatif Pour le maillage obtenu avec notre algorithme (Figure 8(h)), il a fallu 17 itérations au moment où le maillage était 25 ∗ 25. Nous avons vu précédemment que l’on pouvait négliger les étapes précédentes. Sur le troisième exemple, l’algorithme direct, avec les courbes du bords identiques à celle de l’algorithme à subdivision (Figure 9(b)), se termine au bout du même nombre d’itérations. Cependant, la valeur de la courbure de Gauss du maillage obtenu est beaucoup plus forte (presque deux fois plus grande). Comme notre algorithme s’arrête lorsque la variation de la courbure devient trop faible, cela signifie qu’il aurait eu besoin de beaucoup plus d’itérations pour atteindre une courbure de Gauss maximale inférieure à 9.97.10−2 . Par ailleurs, on ne peut pas vraiment comparer les résultats avec le premier algorithme direct (Figure 7(b)), car les courbes de bords ne sont pas les mêmes. Cependant on peut noter que les résultats des algorithme direct et à subdivision sont à peu près semblables. Cela s’explique par le fait que la surface initiale est extraite d’un cylindre, or la surface obtenue par un patch de Coons à partir de ce genre de surfaces est quasi-développable. Ici le maillage 25*25 initial est suffisement proche d’une bonne surface pour faire converger la méthode de Newton rapidement. Dans ce cas, notre algorithme présente peu d’intérêt. 13 4.2 Comparaison de l’algorithme sur un maillage initial très peu développable Sur l’exemple précédent, on ne peut pas affirmer que notre algorithme est meilleur. Dans ce nouvel exemple, il présente un grand intérêt puisque nous prenons une courbe qui est très peu développable à la base. Pour ce faire, nous avons créé quatres courbe de Bézier que nous avons raccordées pour obtenir le contour initial. Sur de telles courbes de bord, le patch de Coons donne des surfaces avec une courbure de Gauss très importante. Regardons les résultats que nous obtenons. Application de l’algorithme direct Nous utilisons cette fois une courbe de bord identique pour les deux algorithmes. Nous commençons donc par optimiser maillage 25 ∗ 25 (Figure 10). Pour l’algoritme direct, nous obtenons (a) Maillage 25*25 initial Courbure de Gauss < 3.07 (b) Maillage 25*25 optimisé Courbure de Gauss < 1.7110−1 Figure 10: Application de l’algorithme de développabilité en une seule étape (courbe de Bezier pour le bord) les résultats suivants : Etape d’optimisation Première étape (Figure 10(b)) Taille du maillage 25 ∗ 25 Nombre d’itérations 36 Courbure maximale finale 3.6.10−1 Algorithme à subdivisions successives Nous partons d’un maillage 4∗4 que nous subdivisons jusqu’à obtenir un maillage 25∗25 (Figure 11). A la fin de chaque étape de subdivision nous obtenons les résultats suivants : Etape d’optimisation Taille du maillage Nombre d’itérations Courbure maximale finale Première étape (Figure 11(e)) 4∗4 24 4.70.10−4 Deuxième étape (Figure 11(f)) 7∗7 21 2.26.10−3 Troisième étape (Figure 11(g)) 13 ∗ 13 18 1.72.10−4 Dernière étape (Figure 11(h)) 25 ∗ 25 15 1.65.10−1 Sur cet exemple, notre algorithme itère la méthode de Newton 15 fois sur un maillage 25*25. Récapitulatif Sur ce deuxième exemple nous observons que notre algorithme converge avec deux fois moins d’itérations. Dans ce cas, et contrairement à l’exemple précédent, la subdivision permet d’augmenter la stabilité de l’algorithme en fournissant un maillage initial de dimension 25*25 (Figure 11(d)) qui est bien meilleur. La surface initiale de la méthode directe (Figure 10(a)) est quelconque et donc n’a aucune raison d’être satisfaisante pour la méthode de Newton. 14 (a) Maillage 4*4 initial étape 0 Courbure de Gauss < 3.87.10−1 (b) Maillage 7*7 initial étape 1 Courbure de Gauss < 9.67.10−1 (c) Maillage 13*13 initial étape 2 Courbure de Gauss < 2.09 (d) Maillage 25*25 initial étape 3 Courbure de Gauss < 5.98 (e) Maillage 4*4 optimisé étape 0 Courbure de Gauss < 4.70.10−4 (f) Maillage 7*7 optimisé étape 1 Courbure de Gauss < 2.26.10−3 (g) Maillage 13*13 optimisé étape 2 Courbure de Gauss < 1.72.10−4 (h) Maillage 25*25 optimisé étape 3 Courbure de Gauss < 1.65.10−1 Figure 11: Application de l’algorithme de subdivision en quatre étapes (courbe de bord extraite d’un cylindre) Dans le cas où le maillage initial est assez loin d’une surface développable, notre méthode itérative présente un intérêt important. On peut observer sur les maillages optimisés intermédiaires (Figures 11(e) 11(f) 11(g)) que les courbures de Gauss sont très faibles, cela permet donc de stabiliser l’algorithme. 5 Conclusion Dans ce papier nous avons vu une méthode permettant de créer un maillage développable interpolant une surface de bord. Nous nous sommes principalement attardés sur le fait de trouver une surface initiale de bonne qualité pour faire converger l’algorithme plus rapidement. Pour cela nous opérons de manière itérative en rendant développable une série de maillages intermédiaires. Cela fournit un surcoût que l’on peut négliger par rapport au coût final d’une optimisation sur un maillage de grande dimension. Bilan et perspectives Au vu des exemples, nous pouvons affirmer que notre algorithme ne présente pas de résultats pires que son prédécesseur (l’optimisateur direct). On constate qu’effectivement sur certains exemples il converge plus rapidement vers une surface développable. Cependant, sur des surfaces qui sont à la base presque développables, son temps d’exécution n’est pas meilleur. En revanche, nous pensons qu’il est possible de travailler sur cet algorithme afin de le rendre plus efficace. Nous avons identifié quelques perspectives pour l’améliorer. En effet, la méthode proposée par [18], et dont nous nous somme servi, travaille sur les angles des points du maillage et non pas la courbure de Gauss directement. En fonction de la taille du maillage, l’optimisation ne rend donc pas la même courbure de Gauss finale. C’est pourquoi nous aimerions optimiser directement la valeur de la courbure de Gauss, et ce d’autant plus que certains résultats laissent à penser que si la courbure de Gauss est suffisamment faible, celle-ci reste bornée après un 15 nombre quelconque de subdivisions de Catmull-Clack. De cette façon, il serait plus juste de travailler directement sur la courbure de Gauss et non pas sur θ. Remerciement Je tiens à remercier Stefanie Hahmann qui m’a encadré pour mon travail d’IRL. References [1] J. Bolz and P. Schröder. Web3D’02, 2002. Rapide Evaluation of Catmull-Clark Subdivision Surfaces. [2] V. Borrelli. Courbure discrète ponctuelle. Actes du séminaire de Théorie spectrale et géométrie, pages 25–39, 2007. [3] E. Catmull and R. Rom. A class of local interpolating splines. Computer Aided Geometric Design, pages 317–326, 1974. [4] C. Chu and C. Séquin. Developpable Bézier patches : properties and design. ComputerAided Design, 2002. [5] T. Cormen, C. Leiserson, R. Rivest, and C. Stein. Introduction à l’algorithmique, seconde édition. 2001. [6] R.T. Farouki, N. Szafran, and L. Biard. Existence conditions for Coons patches interpolating geodesic boundary curves. Computer Aided Geometric Design, 2009. [7] I. Lee H. Chen, S. Leopoldseder, H. Pottmann, T. Randrup, and J. Wallner. On surface approximation using developpable surfaces. Graphical Models and Image Processing, 1999. [8] Mathieu Huard, Nathalie Sprynski, Bernard Lacolle, and Luc Biard. Serret-Frenet Frame Interpolation under Length Constraints for Surface Reconstruction. 2011. [9] Z. Ji, L. Liu, and G. Wang. A Global Laplacian Smoothing Aproach with Feature Preservation. Computer Aided Design, 2005. [10] D. Julius, V. Kraevoy, and A. Sheffer. D-charts: quasi-developpable mesh segmentation. Computer Graphics Forum, 2005. [11] K. Madsen, H.B. Nielsen, and O. Tingleff. Optimisation with constraints. Informatics and Mathematical Modeling, 2004. [12] M. Meyer, M. Desbrun, P. Schröder, and A.H. Barr. Discrete differential-geometry operators for triangulated 2-manifolds. Visualisation and Mathematics III, pages 35–58, 2003. [13] A. Nealen, T. Igarashi, O. Sorkine, and M. Alexa. Laplacian mesh optimisation. 2006. [14] J. Nocedal and S.J. Wright. Numerical Optimisation. 1999. [15] H.R. Pakdel and F. Samavati. Incremental Catmull-Clark Subdivision. [16] M. Peternell. Recognition and reconstruction of developpable surfaces from point clouds. Proceeding of Geometric Modeling and Processing, pages 301–310, 2004. [17] C. Wang. Flattenable Mesh Surface Fitting on Boundary Curves. Engeenering with Computer, 2008. [18] C. Wang. Towards flattenable mesh surfaces. Computer-Aided Design, 2008. 16