From 5dc72ce52c9bead67d7ac4819cd037225635a6a6 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Thu, 11 May 2023 17:38:26 +0200 Subject: [PATCH] removed useless --- slides/cours_20.md | 172 --------------------------------------------- 1 file changed, 172 deletions(-) diff --git a/slides/cours_20.md b/slides/cours_20.md index 421328b..a2b3129 100644 --- a/slides/cours_20.md +++ b/slides/cours_20.md @@ -793,175 +793,3 @@ m&=m_2+m_3,\\ * Il faut stocker les coordonnées des quadrants. * Un nœud a un comportement différent s'il est interne ou externe. -# Algorithme d'insertion - -## Structure de données - -```C -struct node - etoile e // externe: pour stocker - etoile sup_etoile // interne: pour stocker m, x - quadrant q // coordonnées du quadrant - node enfants[4] -``` - -## Remarque: - -* On fait une simplification "moche": `sup_etoile` pourrait juste avoir une masse et une position. - -# Algorithme d'insertion - -\footnotesize - -## Algorithme d'insertion, pseudo-code (15min, matrix) - -. . . - -```C -rien insertion_etoile(arbre, e) - si (!est_vide(arbre) && dans_le_quadrant(arbre.q, e.x)) { - si (est_feuille(arbre)) - si (!contient_etoile(arbre)) - arbre.e = e - sinon - // on crée enfants et arbre.sup_etoile est initialisée - subdivision_arbre(arbre, e) - pour enfant dans arbre.enfants - insertion_etoile(enfant, arbre.e) - pour enfant dans arbre.enfants - insertion_etoile(enfant, e) - destruction(arbre.e) - sinon - maj_masse_cdm(arbre.sup_etoile, e) - pour enfant dans arbre.enfants - insertion_etoile(enfant, e) -``` - -# Utilisation de l'arbre - -* L'arbre est rempli: comment on calcule la force sur le corps 1? -* Parcours de l'arbre: - * si la distance entre 1 et le centre de masse est suffisante, on utilise la masse totale et centre de masse pour calculer la force. - * sinon, on continue le parcours - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* Le cadrant ID ne contient que `1`, rien à faire. - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* Le cadrant SG ne contient `5` corps. - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* La distance entre `1` et le centre de masse de SG est `d`. - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* La distance entre `1` et le centre de masse de SG est `d`. -* Est-ce que `d` est assez grand? -* On va comparer avec la distance `d` avec la taille du quadrant `s`. - -# Critère $\theta$ - -* On compare $d=||\vec x_1-\vec x_{cm}||$ avec $s$ la taille du quadrant. -* Le domain est assez éloigné si - - $$ - \frac{s}{d}<\theta, - $$ -* $\theta$ est la valeur de seuil. -* Une valeur typique est $\theta=0.5$, donc la condition devient - - $$ - d>2s. - $$ - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* Ici $d<2s$, domaine rejeté. -* ON descend dans l'arbre. - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* `s` est plus petit, mais.... -* Cela ne suffit pas $d<2s$, domaine rejeté. - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* Les nœuds sont des feuilles, on calcule la force. -* On ajoute la force qu'ils exercent sur `1`. - -# Algorithme pour le calcul de la force - -Pour calculer la force sur un corps `c`, on parcourt l'arbre en commençant par la racine: - -* Si le nœud `n` est une feuille et n'est pas `c`, on ajoute la force dûe à `n` sur `c`; -* Sinon si $s/d<\theta$, on traite `n` comme une feuille et on ajoute la force dûe à `n` sur `c`; -* Sinon on continue sur les enfants récursivement. - - -## Cotinuous notre exemple précédent! - -# Calcul de la force - -## Calcul de la force sur `1` - - - -* Il y a deux corps dans le quadrant vert. -* Quel est le critère pour remplacer les étoiles par leur centre de masse? - -. . . - -* Et oui! $d>2s$ on peut remplacer les étoiles par leur centre de masse! - -# Algorithme du calcul de force - -## Écrire le psuedo-code du calcul de la force - -\footnotesize - -```C -rien maj_force_sur_etoile(arbre, e, theta) - si est_vide(arbre) - retourne - - si est_feuille(arbre) && contient_etoile(arbre) && dans_le_quadrant(arbre.q, e.x) - maj_force(e, arbre.e) - sinon si noeud_assez_loin(arbre, e, theta) - maj_force(e, arbre.sup_etoile) - sinon - pour enfant dans enfants - maj_force_sur_etoile(enfant, e, theta) -``` - - -- GitLab