• Aucun résultat trouvé

Optimisations algorithmiques

6.1 Recherche de surface .1Lancer de pinceaux

L’objectif final de la méthode de recherche de surface étant la couverture du tra-ducteur par un ensemble de pinceaux, il est utile d’imposer une notion de voisinage et de structure parmi les rayons lancés lors de la recherche de la surface du traduc-teur. Pour ce faire, nous disposons les rayons lancés lors de la phase de recherche du traducteur en pinceaux.

Initialisation

Afin de couvrir de manière exhaustive les directions de lancer de rayons possibles, les directions de départ des rayons des pinceaux que nous lançons doivent couvrir l’ensemble de la sphère unité. Les notions de voisinage entre pinceaux permettent le partage de rayons et donc une couverture complète de la sphère unité. Une première étape du balayage de la sphère unité peut consister à lancer 6 pinceaux dont les directions de départ forment un cube inclus dans la sphère unité, comme présenté en figure6.1.

Figure 6.2 – Pinceaux ayant atteint le plan du traducteur sans en toucher la surface

Une première classification des pinceaux

En procédant au lancer des rayons de chaque pinceau à l’aide de la méthode de lancer de rayons ultrasonores explicitée dans le chapitre3, on peut déterminer pour chaque rayon une information sur la position de son intersection finale. Dans un premier temps, on peut séparer les rayons en deux catégories :

— Les rayons dont l’intersection finale est incluse dans la surface du traducteur, qu’elle ait atteint une partie de la surface émettrice du traducteur ou un es-pace inter-éléments.

— Les rayons n’ayant pas atteint la surface du traducteur.

Un algorithme de recherche de la surface du traducteur se basant uniquement sur cette information binaire ne peut adopter de stratégie de recherche plus efficace qu’un balayage homogène ou un balayage aléatoire. Dans l’objectif de guider la re-cherche du traducteur pour réduire le nombre de rayons nécessaires pour trouver la surface du traducteur, il est utile de disposer d’une notion de proximité d’un rayon à la surface du traducteur.

Extension de la surface du traducteur

Dans le cadre de nos simulations, nous nous sommes intéressés à des traducteurs à surface plane. En complétant virtuellement la surface du traducteur par le plan la contenant, il est possible de compléter la classification précédente en y ajoutant la catégorie des rayons n’ayant pas atteint le traducteur, mais ayant intersecté le plan le contenant, comme cela est présenté en figure6.2.

De cette façon, en calculant la distance du point d’intersection du rayon avec le plan du traducteur à sa surface, on peut déterminer la proximité du rayon au traducteur. Puisque cette distance ne sert qu’à établir un critère de priorité, elle peut être approximée par le minimum de distance du rayon à chacun des coins de la surface du traducteur. Dans le cas où le rayon a atteint le traducteur, cette distance est automatiquement fixée à 0. Ce critère de distance permet, dans une hypothèse de continuité géométrique de la scène, de localiser plus facilement le traducteur. Raffinement prioritaire du balayage

En effet, toujours dans une hypothèse de continuité géométrique, un raffinement du balayage dans les zones où les rayons sont proches du traducteur permet d’aug-menter la densité de rayons aux alentours des zones d’intérêt. De cette manière, les chances de trouver le traducteur avec moins de rayons sont augmentées par rapport à une approche de recherche non informée.

dNEdEdSdWdNdCdSEdSWdNW

Figure 6.3 – Subdivision d’un pinceau de rayons en 4 sous pinceaux

Pour raffiner le balayage dans une zone donnée, nous procédons à la subdivision d’un pinceau. Dans le cas général, cette subdivision est régulière sur les directions de départ. Étant donné un pinceau constitué des directions de départ dN E, dN W, dSW

et dS E, nous construisons 5 nouvelles directions (voir la figure6.3) : ⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ dN= dN E+dN W dN E+dN W dS= dS E+dSW dS E+dSW dE= dN E+dS E dN E+dS E dW= dN W+dSW dN W+dSW dC= dN E+dN W+dS E+dSW dN E+dN W+dS E+dSW

Ce qui nous permet de constituer les 4 sous-pinceaux issus de la subdivision : ⎧ ⎪ ⎪ ⎨ ⎪ ⎪ ⎩ {dN E, dN, dC, dE} {dN, dN W, dW, dC} {dC, dW, dSW, dS} {dE, dC, dS, dS E}

Ce processus de subdivision reprend les idées principales de la méthode

Hierarchi-cal Triangular Mesh proposée parSzalay et collab.(2007) en l’adaptant aux pinceaux

quadrangulaires. De cette façon, il est possible d’obtenir une distribution de rayons convergeant vers la surface du traducteur et organisée en pinceaux de rayons. Arbre de subdivisions

Les subdivisions successives des pinceaux créent une hiérarchie. En considérant la subdivision comme une relation de parenté entre les pinceaux, il est possible de construire un arbre de subdivisions des pinceaux. Le nœud racine de cet arbre

P1

P2 P3

P4

Figure 6.4 – Différents états de pinceaux à l’arrivée sur la surface du traducteur possède 6 nœuds fils qui sont les 6 pinceaux correspondant aux faces du cube de départ.

De cette façon, la recherche de la surface du traducteur en explorant l’espace par lancer des rayons peut être rapportéee à une exploration d’arbre. On peut alors considérer diverses stratégies pour cette exploration :

— Le parcours en largeur, qui revient à subdiviser uniformément l’ensemble des pinceaux jusqu’à trouver la surface du traducteur.

— Le parcours en profondeur, inadapté dans cette situation. En effet, explorer une branche de l’arbre jusqu’à son extrémité revient à subdiviser autant que possible une partie d’un pinceau avant d’explorer les autres zones. Un tel type de parcours n’est pas adapté à la recherche de surfaces.

— Un parcours informé ou adaptatif, explorant en priorité les zones les plus susceptibles de contenir la surface du traducteur.

Si toutes ces stratégies peuvent théoriquement converger vers le résultat (à condi-tion d’imposer une limite de subdivision pour le parcours en profondeur), le parcours informé de l’arbre des subdivisions permet, à condition de disposer d’un critère de priorité efficace, de converger plus rapidement que les deux autres parcours envisa-gés vers une zone de visibilité de la surface du traducteur depuis le point d’origine.

6.1.2 Algorithme de recherche de surface

Critères de classification

On définit une classification des pinceaux en 3 attributs, en fonction de l’état d’arrivée des rayons d’un pinceau :

1 Surface du traducteur intersectée.

2a Plan du traducteur couvert (tous les rayons sont arrivés sur le plan du traduc-teur).

2b Plan du traducteur intersecté (au moins un rayon est arrivé sur le plan du traducteur).

La figure6.4représente différents pinceaux arrivés différemment sur la surface du traducteur. Pour les pinceaux P1, P2, P3et P4représentés, on a :

— P1a l’attribut 2b.

— P2a les attributs 2a et 2b. — P3a les attributs 1, 2a et 2b. — P4a les attributs 1 et 2b.

Critères de classification

Pour classifier un pinceau donné selon les attributs que nous avons définis, deux conditions sont testées dans l’ordre suivant :

1. On vérifie si au moins un des rayons a intersecté la surface du traducteur. 2. Dans le cas où tous les rayons ont atteint le plan du traducteur et où aucun des

rayons n’a atteint la surface du traducteur, on vérifie si le quadrangle délimité par les points d’arrivée des quatre rayons intersecte la surface du traducteur. Si l’une de ces conditions est vérifiée, le pinceau est considéré comme ayant at-teint la surface du traducteur et les attributs 1 et 2b sont appliqués. Puis, si l’ensemble des rayons a atteint le plan du traducteur, l’attribut 2a est également appliqué et le pinceau peut être conservé pour la suite.

Si l’attribut 2a n’est pas applicable, le pinceau ne peut être utilisé immédiatement et doit être subdivisé afin d’éventuellement en extraire un pinceau doté de l’attribut 2a. De même, si un des attributs 1 et 2b n’est pas applicable, le pinceau ne peut être utilisé et doit être subdivisé.

Critère de priorité

Pour chaque pinceau dont la classification a été déterminée, nous calculons un score déterminant la priorité de ce pinceau à être subdivisé. Cette priorité tient compte des critères suivants :

— L’état de classification du pinceau : si le pinceau atteint le traducteur, le score est maximal de façon à le traiter au plus vite.

— La distance du pinceau au traducteur lorsque celui-ci a intersecté le plan du traducteur : plus le pinceau est proche du traducteur, plus il est prioritaire. Cette distance est calculée comme la distance du rayon le plus proche des bords du traducteur.

— La profondeur du pinceau dans l’arbre de subdivision : dans l’objectif d’éviter une exploration trop hétérogène de l’arbre de subdivision, une profondeur dans l’arbre de subdivisions faible induit une priorité plus élevée. De cette façon, la profondeur d’exploration de l’arbre est homogénéisée et on favorise la découverte de plusieurs zones de visibilité.

En pratique, le score attribué aux pinceaux ayant atteint le plan du traducteur est inversement proportionnel au carré de la distance du pinceau au traducteur. Un facteur multiplicatif constant est ajouté pour favoriser ces pinceaux.

La valeur de ce facteur est ajustable et caractérise la tendance de l’algorithme à subdiviser des pinceaux n’ayant pas atteint le plan du traducteur par rapport à des pinceaux l’ayant atteinte à une distance importante. Nous l’avons fixée de sorte que des pinceaux situés à une distance de 1000 mm du traducteur aient la même priorité que des pinceaux n’ayant pas atteint le plan du traducteur.

〈calculScore〉 float score(Pinceau p) { float résultat = 0; if(p.traducteurAtteint()) { résultat = ; } else if(p.planTraducteurAtteint()) { float distance = p.distanceTraducteur();

résultat = (1000 * 1000) / (distance * distance); }

Figure 6.5 – Compensation de l’aplatissement d’un pinceau par subdivision selon l’axe le plus long else { résultat = 1; } résultat /= profondeur; return résultat; } Algorithme d’exploration

L’exploration avec priorités de l’arbre de subdivisions peut être effectuée au moy-en d’une file de priorités dans laquelle les pinceaux sont ajoutés et qui est vidée au fur et à mesure de la progression de l’exploration. En pratique, en dehors de pinceaux ayant atteint le traducteur, une telle exploration ne se termine que lorsque chacune des branches de l’arbre de subdivisions a été explorée jusqu’à la limite de subdivision. Un critère d’arrêt de l’algorithme est donc nécessaire pour limiter la recherche.

Une fois qu’un pinceau intersectant le traducteur est trouvé, l’algorithme d’ex-ploration change d’objectif et de phase : il s’agit alors de cerner la zone de visibi-lité du traducteur autour du pinceau trouvé. L’ensemble des pinceaux n’ayant pas intersecté le plan du traducteur est éliminé et une subdivision supplémentaire est autorisée pour les pinceaux ayant couvert le plan du traducteur. Les pinceaux ayant intersecté la surface du traducteur, mais possédant au moins un rayon hors du plan du traducteur sont subdivisés pour obtenir des sous-pinceaux couvrant le plan du traducteur.

Remarque : En procédant de la sorte, dans le cas où plusieurs zones de visibilité du traducteur existent, il est possible de ne pas détecter des zones placées plus en profondeur dans l’arbre des subdivisions. Nous faisons implicitement l’hypothèse que les zones plus en profondeur dans l’arbre ont une contribution négligeable devant celle des premières zones trouvées.

Dans le cas d’un pinceau dont l’ensemble des rayons a atteint le plan du traducteur, les dimensions du quadrangle formé par les quatre rayons du pinceau sur le plan du traducteur sont comparées et, dans le cas d’un pinceau aplati, on privilégie la subdivision selon l’axe permettant de compenser l’aplatissement du pinceau, comme schématisé en figure6.5.

L’algorithme de recherche du traducteur renvoie une liste de pinceaux ayant at-teint la surface du traducteur. Ses étapes sont les suivantes :

— Initialisation des 6 pinceaux de départ correspondant aux faces d’un cube sur la sphère unité.

— Calcul des 6 pinceaux.

— Ajout des 6 pinceaux calculés à la file de priorité. Boucle principale

— Retrait du pinceau P en tête de la file de priorité (si elle n’est pas vide). — Analyse du pinceau.

Pour la phase de recherche du traducteur avant qu’un premier pinceau n’ait in-tersecté le traducteur, la phase d’analyse est telle que suit :

— Si P vérifie les attributs 1, 2a et 2b, stockage de P dans la liste résultat et passage de l’algorithme à la deuxième phase.

— Sinon, subdivision du pinceau P en deux (pour compenser l’aplatissement) ou en quatre et calcul des sous-pinceaux résultants puis ajout des sous-pinceaux à la file.

Pour la seconde phase, la boucle principale est identique, mais la phase d’analyse et de traitements change :

— Si P ne vérifie aucun attribut, il est ignoré.

— Si P vérifie les attributs 1, 2a et 2b, stockage de P dans la liste de résultats. — Si P vérifie les attributs 1 et 2a, subdivision de P, ajout des sous-pinceaux à

la file de priorité.

— Si P a été marqué pour élimination, il est alors ignoré.

— Sinon, subdivision de P, ajout des sous-pinceaux à la file de priorité et mar-quage des sous-pinceaux pour élimination.

Une fois que la file de priorité ne comporte plus aucun pinceau, l’algorithme s’arrête et renvoie la liste des pinceaux ayant atteint le traducteur. Si le traducteur n’est pas trouvé au-delà d’un nombre limite de pinceaux calculés1, l’algorithme est arrêté et le point de champ sur lequel il a été exécuté n’est pas calculé.