Arithmétique d'Intervalles L'arithmétique d'intervalles
Arithmétique d'Intervalles Plan ● L'arithmétique d'intervalles – Définitions ● Intervalle ● Fonction d'inclusion – Opérateurs relationnels et logiques – Applications ● Visualisation d'une surface implicite – Octree et Marching Cubes – Lancé de rayons
Arithmétique d'Intervalles Arithmétique d'intervalles ● Généralisation de l'arithmétique aux intervalles fermés, bornés, réels. ● Définitions : – Si a et A R et a < A alors : [] A = [a,A] = { R/ a A} est un intervalle de dimension 1 a : borne inférieure. A : borne supérieure. I – Soit I l'ensemble de tous les Intervalles de dimension 1 x R [] A I [] A = [a, A] [ ] Intervalle de dimension n : [ ] A = ( [] A 1, [] A 2, …, [] A n ) [] A = {x = (x 1, x 2, …, x n ) / x i [] A i avec [] A i I, i = 1, 2, …, n} x a [] A A
Arithmétique d'Intervalles Différentes dimensions ● 1D : Segment de droite [ ] ● 2D : Parallélogramme [] A = ( [] X, [] Y) ● Exercice : – Faites un schéma représentant un intervalle 3D [] A = ( [] X, [] Y, [] Z). Quelle est la représentation géométrique de [] A ? [] X [] Y x [] X x y
Arithmétique d'Intervalles Fonctions d'inclusion ● A partir d'une fonction f : R m R n on peut définir une fonction d'inclusion [] f telle que: – Soit I n l'ensemble des intervalles de dimension n: [] f : I m I n, [] A I m, x [] A f(x) [] f( [] A) – Exemple: si p(x,y,z) [] A( [] X, [] Y, [] Z) alors f(p) [] f( [] X, [] Y, [] Z) – Propriété: { f(x) / x = (x 1, x 2, …, x m ), x i [] A i et [] A i I, i = 1, 2, …, m} [] f( [] A)
Arithmétique d'Intervalles Fonction monotone a A f(a) f(A) a A f(a) f(A) ● Construction d'une fonction d'inclusion d'une fonction monotone f : R R [] f ??? : I I x y=f(x) [] A [] B= [] f( [] A) fonction f croissante fonction f décroissante [] f( [] A) = [f(a), f(A)] [] f( [] A) = [f(A), f(a)]
Arithmétique d'Intervalles Exercices ● Donnez une fonction d'inclusion de la fonction exponentiel ● Donnez une fonction d'inclusion précise de la fonction x n, n N *. On s'appuiera sur la variation de le fonction
Arithmétique d'Intervalles Opérateurs arithmétiques ● Ce sont les opérateurs + - * / – La question à se poser est la suivante: x A y B, quel est un opérateur op tel que x op y A op B ● [a,A] + [b,B] = [a+b, A+B] ● [a,A] - [b,B] = [a-B, A-b] ● [a,A] * [b,B] = [min(a*b, a*B, A*b, A*B),max(a*b, a*B, A*b, A*B)] ● [a,A] / [b,B] = [min(a/b, a/B, A/b, A/B),max(a/b, a/B, A/b, A/B)] si 0 [b,B], indéfini sinon ● [a,A] R + 3 = [a+3, A+3] ● x R * [a,A] = [x*a, x*A] si x 0 [x*A, x*a] si x 0
Arithmétique d'Intervalles Composition de fonctions ● Soient g et h deux fonctions telles que : – g: R m R n et h: R n R p x y=g(x) y z=h(y) ● Soient [] g et [] h deux fonctions d'inclusion qui leur sont respectivement associées – [] g: I m I n et [] h: I n I p [] A [] g( [] A) [] B C [] h( [] B) ● Une fonction d'inclusion de la fonction f (x) = (hºg)(x) = h( g(x) ) est la fonction d'inclusion [] f ( [] A) = ( [] hº [] g)( [] A) = [] h( [] g( [] A) )
Arithmétique d'Intervalles Exemples ● Soient les fonction f, g, h qui sont de R m R et [] f, [] g, [] h leurs fonctions d'inclusion de I m I respectives – [] A I m, [] f( [] A) = [b,B], [] g( [] A) = [c,C], [] h( [] A) = [d,D] – ainsi: [] f [] + ( [] g [] + [] h) est une fonction d'inclusion de f+(g+h) ● Application à l'équation implicite f: R 3 R d'une sphère de rayon r centrée en (x 0, y 0, z 0 ) f (x,y,z) = (x – x 0 ) 2 + (y – y 0 ) 2 + (z – z 0 ) 2 – r 2 [] f ( [] A, [] B, [] C) = ( [] A []R - x 0 ) 2 [] + ( [] B []R - y 0 ) 2 [] + ( [] C []R - z 0 ) 2 []R - r 2
Arithmétique d'Intervalles Exercice ● Nous allons observer différentes façon de construire des fonctions d'inclusion – Donnez l'intervalle retourné par la fonction d'inclusion de x 2 quand l'intervalle de départ est [] A = [-1,1] et que la fonction d'inclusion est construite à partir de : ● x 2 = x*x ● x 2 = x n avec n=2 – Que constatez-vous ? – Quelle construction vous semble la plus pertinente ? Pourquoi ?
Arithmétique d'Intervalles Opérateurs relationnels ● Les opérateurs relationnels : = ● Les intervalles booléens : – [0,0] : faux – [1,1] : vrai – [0,1] : indéterminé ● Exemple : [0,0] si a [a,A] [] < [b,B] = [1,1] si A < b [0,1] sinon ● Exercice : – Construisez les opérateurs relationnels suivants : [] et [] =
Arithmétique d'Intervalles Opérateurs logiques [ ] et [0, 0][0, 1][1, 1] [0, 0] [0, 1][0, 0][0, 1] [1, 1][0, 0][0, 1][1, 1] [ ] ou [0, 0][0, 1][1, 1] [0, 0] [0, 1][1, 1] [0, 1] [1, 1] [0, 0][0, 1][1, 1] [ ] non[1, 1][0, 1][0, 0]
Arithmétique d'Intervalles Application aux surfaces implicites – f : R 3 R Surface implicite définie par : f(P) = 0 P(x,y,z) f(P) = c P si f(P) < 0, P est à l'intérieur si f(P) > 0, P est à l'extérieur – [] f : I 3 I [] P( [] X, [] Y, [] Z) [] f ( [] P) = [] C = [c,C] [] X [] Y [] Z x y z P(x,y,z) [] P( [] X, [] Y, [] Z) c C [] f ( [] P) = [] C f(P) Si P [] P alors f(P) [] f ( [] P)
Arithmétique d'Intervalles Position du volume / surface – [] f( [] P) = [] C ● [] C []R < 0 : [] P est à l'intérieur du volume ● [] C []R > 0 : [] P est à l'extérieur du volume ● 0 [] C : [] P est PEUT-ETRE sécant à la surface – Peut être directement effectué avec le test suivant: [] b = [] f( [] P) []R < 0 ● [] b = [1,1] (Vrai) : [] P à l'intérieur du volume ● [] b = [0,0] (Faux) : [] P à l'extérieur du volume ● [] b = [0,1] (Indéterminé) : [] P est PEUT-ETRE sécant à la surface
Arithmétique d'Intervalles CSG avec des opérateurs logiques ● Soient [] f 1 et [] f 2 deux fonctions d'inclusion des fonctions potentiels f 1 et f 2 représentant deux primitives 3D O 1 et O 2. [] b 1 = [] f 1 ( [] P) []R < 0 [] b 2 = [] f 2 ( [] P) []R < 0 [] b 1 et [] b 2 permettent de positionner [] P par rapport aux primitives O 1 et O 2 O 1 O 2 est donné par : [] b 3 = [] b 1 [] ou [] b 2 O 1 O 2 est donné par : [] b 3 = [] b 1 [] et [] b 2 O 1 est donné par : [] b 3 = [] non ( [] b 1 ) O 1 \ O 2 est donné par : [] b 3 = [] b 1 [] et ( [] non ( [] b 2 )) car O 1 \ O 2 = O 1 O 2
Arithmétique d'Intervalles Exercice ● Vérifier que l'opérateur [] ou donne bien l'union des deux ellipses. Les carrés représentent différentes valeur de l'intervalle d'entrée [] P. f 1 : R 3 R O 1 = { P R 3 / f 1 (P) 0} f 2 : R 3 R O 2 = { P R 3 / f 2 (P) 0}
Arithmétique d'Intervalles Exercice ● En gardant les mêmes interprétations d'intérieur, extérieur et sécant pour les valeurs de [ ] b i, donnez le teste à effectuer pour la fonction d'inclusion d'une fonction à support compact type « blob ».
Arithmétique d'Intervalles Exemple d'utilisation 1 : Construction d'un octree représentant une surface implicite
Arithmétique d'Intervalles Octree ● Un octree permet de découper récursivement une région de l'espace en sous-régions. Racine Octree régulier Octree adaptatif noeuds feuilles
Arithmétique d'Intervalles Visualisation d'une surface implicite ● On utilise un octree adaptatif pour subdiviser l'espace et on recherche les feuilles qui sont sécantes avec la surface. – Soient [] f : I 3 I la fonction d'inclusion de la fonction potentiel f : R 3 R et [] P la région dans laquelle on veut visualiser la surface []P[]P f(P) = 0 f(P) > 0 f(P) < 0
Arithmétique d'Intervalles Construction de l'octree si ( [] f( [] P) []R < 0 ) = [0,0] alors la région est une feuille et elle vaut : “Extérieur” si ( [] f( [] P) []R < 0 ) = [1,1] alors la région est une feuille et elle vaut : “Intérieur” si ( [] f( [] P) []R < 0 ) = [0,1] –si (Taille_Region > Taille_min) alors la région est peut-être sécante. C'est un noeud et on rappelle la procédure sur ses 8 sous-régions –sinon la région est une feuille et »si (test_sommets = 0) elle vaut : “Couleur_de_l_objet” »si (test_sommets = 1) elle vaut : “Intérieur” »si (test_sommets = -1) elle vaut : “Extérieur” test_sommet = 1 si f(P) < 0 pour les 8 sommets de la région test_sommet = -1 si f(P) > 0 pour les 8 sommets de la région test_sommet = 0 sinon
Arithmétique d'Intervalles Force de l'arithmétique d'intervalle ● Elle permet de détecter l'intersection entre la surface et la région, même si les sommets de la région sont tous à l'extérieur ou tous à l'intérieur de la surface Si on teste uniquement les sommets, on ne paut pas détecter l'intersection Avec l'arithmétique d'intervalle: –( [] f( [] P) []R il y a peut-être intersection –( [] f( [] P) []R on est certain qu'il n'y a pas intersection
Arithmétique d'Intervalles Algorithme du marching cube ● Illustration en 2D Non sécant Sécant Sécant et indétermination
Arithmétique d'Intervalles Algorithme du marching cube ● En 3D, aprés exploitation des symmétries, il reste 14 cas différents. Exemples : ● A partir d'un ensemble de cellules intersectant une surface, on obtient un maillage triangulaire de la surface. ● Problème des arêtes franches :
Arithmétique d'Intervalles Exercice ● Appliquer le marching-cube en 2D sur le dessin suivant : ● Observez la qualité de la reconstruction
Arithmétique d'Intervalles Extended marching cube ● Pour reconstruire correctement les arêtes, il existe des version étendues du marching cube [1]. En général, ces méthodes utilisent: – Le calcul d'intersection entre une arête et la surface est effectué par interpolation linéaire: – La normale à la surface est évaluée aux points d'intersection – On maille le cube à partir des plans passant par les points d'intersection (ayant comme normale la normale à la surface au point) [1] L. Kobbelt et al. “Feature Sensitive Surface Extraction from Data Volume”. SIGGRAPH 2001 f(P 1 ) = a a<0 f(P 2 ) = b b>0 P? tel que f(P) = 0
Arithmétique d'Intervalles Exercice ● Appliquer le marching-cube avancé en 2D sur le dessin suivant : ● Comparez la qualité de la reconstruction par rapport au marching-cube classique.
Arithmétique d'Intervalles Exemple d'utilisation 2 : Lancé de rayons sur une surface implicite
Arithmétique d'Intervalles Lancé de rayons ● On transforme l'objet de manière à aligner le rayon sur un axe Observateur Image Rayon Repère objet Repère scène Repère objet PiPi PfPf
Arithmétique d'Intervalles Lancé de rayons ● On utilise une technique de dichotomie basée sur l’arithmétique d’intervalles. On teste d’abord la moitié du rayon la plus proche de l’observateur, et si il n’y pas d’intersection, on traite la moitié la plus éloignée. PfPf PiPi [] P = ([P i, P f ], [0, 0], [0, 0]) si ( [] f( [] P) []R < 0 ) = [0, 1] alors tester [] P = ([P i, (P i +P f )/2], [0,0], [0,0])...
Arithmétique d'Intervalles Exercice ● Ecrire l’algorithme de lancé de rayons utilisant cette technique. La fonction d’inclusion de la fonction potentiel est supposée connue et l’iso-surface est en 0.