diff --git a/slides/cours_21.md b/slides/cours_21.md index 8afc677bad2b73ec786e55e06ea0e3c4b4015250..102aaf02ae8da80a31b592039745cf4335cd7652 100644 --- a/slides/cours_21.md +++ b/slides/cours_21.md @@ -776,5 +776,59 @@ rien insertion_etoile(arbre, e)  -* Les noeuds sont des feuilles, ils sont acceptés. +* Les noeuds 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 noeud `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 + +```C +rien maj_force_sur_etoile(arbre, e, theta) + si est_vide(arbre) ou !existe(e) + retourne + if (!n || !p) { + return; + } + + // if the node is a leaf and contains a particle which and the particle is not + // in the bounding box of the node (this means that we are at a particle on + // a different leaf). + if (node_is_leaf(n) && !node_is_empty(n) && !is_inside(n->b, p->pos)) { + update_acceleration(p, n->p); + } + // else if the node is far enough of the particle + else if (node_is_far_enough(n, p, theta)) { + update_acceleration(p, n->super_p); + } + else { // else just update the acceleration recurively + for (int i = 0; i < 4; ++i) { + update_acceleration_from_node_on_particle(n->children[i], p, theta); + } + } +} +``` diff --git a/slides/figs/force_7.png b/slides/figs/force_7.png new file mode 100644 index 0000000000000000000000000000000000000000..751ef2e9d7d7a6ed16f5cc7a2e7d9cb48b03efe1 Binary files /dev/null and b/slides/figs/force_7.png differ