class: center, middle, inverse, title-slide .title[ # Comment utiliser les mathématiques… ] .subtitle[ ## … pour imprimer en 3D ] .author[ ###
Marc-André Désautels
] .institute[ ### Cégep Saint-Jean-sur-Richelieu ] .date[ ### Octobre 2022
Présentation disponible à
https://desautm.github.io/Imprimante3D
Code disponible à
https://github.com/desautm/Imprimante3D
] --- class: center, middle <iframe width="800" height="600" src="https://www.youtube.com/embed/m_QhY1aABsE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> --- class:inverse, middle, center # Quelques rappels --- class:inverse, center, middle # L'équation d'une droite dans le plan --- class: center, middle ![](index_files/figure-html/unnamed-chunk-1-1.png)<!-- --> --- class:middle, center <iframe src="https://www.geogebra.org/classic/fuebudnz?embed" width="800" height="600" allowfullscreen style="border: 1px solid #e4e4e4;border-radius: 4px;" frameborder="0"></iframe> --- class:inverse, center, middle # L'équation d'une droite dans l'espace --- class: center, middle ![](index_files/figure-html/unnamed-chunk-2-1.png)<!-- --> --- class:inverse, center, middle # L'équation d'un plan dans l'espace --- class: middle, center ![](index_files/figure-html/unnamed-chunk-3-1.png)<!-- --> --- class: inverse, center, middle # Une modélisation 3D d'un objet --- class: center, inverse background-image: url("https://i.stack.imgur.com/ENvMe.png") background-size: contain --- class: inverse, center, middle # [RepRap](https://reprap.org/wiki/RepRap) > RepRap is humanity's first general-purpose self-replicating manufacturing machine. --- # STL pour STéréoLitographie - Ce format ne comporte pas d'informations concernant la couleur, la texture. - Le **format de fichier STL** ne décrit que la géométrie de surface d'un objet en 3 dimensions. - Cette surface est nécessairement fermée et définie par une série de triangles (ou de facettes). - Chaque triangle est défini par les coordonnées cartésiennes ( `\(x\)`, `\(y\)`, `\(z\)`) dans un trièdre direct de son vecteur normal unitaire ( `\(\vec n\)`) orienté vers l'extérieur de l'objet et de ses trois sommets ordonnés dans le sens trigonométrique. - Chaque triangle doit partager 2 sommets avec chacun des triangles le juxtaposant. Dit autrement, le sommet d'un triangle ne doit pas être sur l'arête d'un autre triangle. - L'unité de longueur est arbitraire. --- # Le format de fichier STL .pull-left[ facet normal `\(n_x\)` `\(n_y\)` `\(n_z\)` outer loop vertex `\(v_{1_x}\)` `\(v_{1_y}\)` `\(v_{1_z}\)` vertex `\(v_{2_x}\)` `\(v_{2_y}\)` `\(v_{2_z}\)` vertex `\(v_{3_x}\)` `\(v_{3_y}\)` `\(v_{3_z}\)` end loop end facet ] .pull-right[ <img src="index_files/figure-html/triangle-with-vertex-normal-1.png" style="display: block; margin: auto;" /> ] --- # Le format de fichier STL : Un exemple ``` facet normal -6.123234e-17 0.000000e+00 1.000000e+00 outer loop vertex -6.514841e+00 1.043095e+02 9.525001e+00 vertex -9.595548e+00 1.042182e+02 9.525001e+00 vertex -6.558662e+00 1.041282e+02 9.525001e+00 endloop endfacet facet normal -6.123234e-17 0.000000e+00 1.000000e+00 outer loop vertex -6.558662e+00 1.041282e+02 9.525001e+00 vertex -9.595548e+00 1.042182e+02 9.525001e+00 vertex -9.541054e+00 1.040397e+02 9.525001e+00 endloop endfacet ``` --- class: inverse, center, middle # Couper le solide en polygones --- ## On veut trouver l'intersection d'un plan avec le solide - Le solide est composé de plusieurs triangles. - Chaque triangle est composé de trois points. - Étape 1 : Est-ce que les trois points sont du même côté du plan? - Étape 2 : Si oui, alors on ne fait rien. - Étape 3 : Si non, on trouve l'intersection des deux segments de droites formés avec le plan. --- class:middle, center <iframe src="https://www.geogebra.org/classic/rycfkefc?embed" width="800" height="600" allowfullscreen style="border: 1px solid #e4e4e4;border-radius: 4px;" frameborder="0"></iframe> --- class: inverse, center, middle # Est-ce qu'un triangle croise le plan? --- ## Intersection Triangle - Plan - Avant de trouver l'intersection d'un triangle avec un plan, on va trouver *SI* le triangle intersecte le plan. - Il intersecte le plan si tous les points du triangle ne sont pas du même côté du plan. - Comment s'y prendre? - En pratique, c'est facile car le plan de coupe est toujours parfaitement horizontal et donné par une valeur de `\(z\)` constante. --- ## Intersection Triangle - Plan - On translate nos points selon la hauteur de la coupe; - Il y a intersection si nous avons un ou deux points qui ont une coordonnée en `\(z\)` de signe différent de l'autre coordonnée. ![](index_files/figure-html/unnamed-chunk-4-1.png)<!-- --> --- ## Intersection Triangle - Plan ![](index_files/figure-html/unnamed-chunk-5-1.png)<!-- --> - L'équation du segment de droite est donnée par `\((x,y,z)=(v_{1_x},v_{1_y},v_{1_z})+t(v_{2_x}-v_{1_x},v_{2_y}-v_{1_y},v_{2_z}-v_{1_z})\)`. - On résoud pour `\(z=0\)` - Nous avons donc une collection de points que nous relions ensemble pour former un polygone. - Le tour est donc joué! --- class: inverse, center, middle # Malheureusement la vie n'est jamais aussi facile... -- <img src="https://media.giphy.com/media/ccAuVsSPSLrDq/giphy.gif" width="50%" /> --- class: middle, center ## En théorie nous obtenons ceci ![](index_files/figure-html/unnamed-chunk-7-1.png)<!-- --> --- class: middle, center ## En pratique nous obtenons plutôt cela ![](index_files/figure-html/unnamed-chunk-8-1.png)<!-- --> --- ## Comment passer de l'un à l'autre? .pull-left[ ![](index_files/figure-html/unnamed-chunk-9-1.png)<!-- --> ] .pull-right[ ![](index_files/figure-html/unnamed-chunk-10-1.png)<!-- --> ] --- ## Trouver le plus proche voisin? <img src="index_files/figure-html/unnamed-chunk-11-1.png" style="display: block; margin: auto;" /> -- - La notion de *plus proche voisin* n'est pas réciproque! - Le plus proche voisin de `\(A\)` est `\(B\)`, mais le plus proche voisin de `\(B\)` est `\(C\)`. --- class:inverse, middle, center # Les Quadtree ou Arbres Quaternaires --- ## Les arbres quaternaires - Un quadtree ou arbre quaternaire est une structure de données de type arbre dans laquelle chaque noeud a quatre fils. - Les arbres quaternaires sont le plus souvent utilisés pour partitionner un espace bidimensionnel en le subdivisant récursivement en quatre noeuds. -- <img src="https://upload.wikimedia.org/wikipedia/commons/8/8b/Point_quadtree.svg" width="50%" style="display: block; margin: auto;" /> --- class: middle, center ![](https://miro.medium.com/max/1400/0*h4X6RYkvgIEz65Pm) --- class:middle, center ![](index_files/figure-html/unnamed-chunk-13-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-14-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-15-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-16-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-17-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-18-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-19-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-20-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-21-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-22-1.png)<!-- --> --- class: inverse, center, middle # Simplifier des droites --- ## La distance entre un point et une droite .pull-left[ `\begin{align*} d &= \frac{\left|\overrightarrow{QP}\cdot \vec n \right|}{\left\lVert\vec n\right\rVert} \\ &= \frac{\left|(x_P-x_0;y_P-y_0)\cdot(a;b) \right|}{\sqrt{a^2+b^2}} \\ &= \frac{\left|a(x_P-x_0)+b(y_P-y_0) \right|}{\sqrt{a^2+b^2}} \\ &= \frac{\left|ax_P+by_P+(-ax_0-by_0) \right|}{\sqrt{a^2+b^2}} \\ &= \frac{\left|ax_P+by_P+c \right|}{\sqrt{a^2+b^2}} \\ \end{align*}` ] .pull-right[ ![](index_files/figure-html/unnamed-chunk-23-1.png)<!-- --> ] -- - De plus, le signe du produit scalaire indique si le point est **au-dessus** ou **en-dessous** de la droite. --- class:middle, center ![](index_files/figure-html/unnamed-chunk-24-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-25-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-26-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-27-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-28-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-29-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-30-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-31-1.png)<!-- --> --- class:middle, center ![](index_files/figure-html/unnamed-chunk-32-1.png)<!-- --> --- class:middle, center ![Animation de l'algorithme pour simplifier une droite](simplify_line.gif) --- class: inverse, center, middle # La coupe de notre solide --- ## La largeur du filament .pull-left[ ![](index_files/figure-html/unnamed-chunk-33-1.png)<!-- --> ] .pull-right[ - On pourrait croire qu'il suffit de "dire" à la buse d'extrusion de tracer ces courbes polygonales et de les remplir; - Par contre, la largeur du filament causerait le plastique à déborder de la région à remplir; - Nous ne construirions pas la coupe de notre solide convenablement; - Il faut plutôt déplacer le chemin de la buse dans la région par la moitié de la largeur du filament. ] --- class: middle, center ![](index_files/figure-html/unnamed-chunk-34-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-35-1.png)<!-- --> --- class: inverse, center, middle # Géométrie de construction de solides (ou GCS) --- # Géométrie de construction de solides (ou GCS) - La GCS permet de représenter simplement un ensemble de points et de travailler ensuite avec ceux-ci à l'intérieur d'un programme informatique; - La GCS considère que tous les ensembles sont construits à partir d'ensembles **plus simples**, qui font office de blocs de construction; - Certaines règles simples permettent ensuite d'échafauder des structures complexes. --- # La représentation GCS d'un polygone - Nous utiliserons des demi-plans pour représenter un polygone; - Les règles de construction utilisées seront les mêmes que celles des ensembles: - Le complément; - L'union; - L'intersection - Une droite orientée définit un demi-plan `\(H\)` se trouvant à gauche de la droite lorsqu'on se déplace dans la direction définie par l'orientation. --- class: center, middle ![](index_files/figure-html/unnamed-chunk-36-1.png)<!-- --> Nous pouvons voir `\(H\)` comme une fonction booléenne sur le plan: `\(H(p)=\textbf{VRAI}\)` si et seulement si `\(p\in H\)`. --- class: center, middle ![](index_files/figure-html/unnamed-chunk-37-1.png)<!-- --> --- class:middle, center <iframe src="https://www.geogebra.org/classic/mfb2dpxf?embed" width="800" height="600" allowfullscreen style="border: 1px solid #e4e4e4;border-radius: 4px;" frameborder="0"></iframe> --- # Le complément ![](index_files/figure-html/unnamed-chunk-38-1.png)<!-- --> --- # L'union ![](index_files/figure-html/unnamed-chunk-39-1.png)<!-- --> --- # L'intersection ![](index_files/figure-html/unnamed-chunk-40-1.png)<!-- --> --- # La différence ![](index_files/figure-html/unnamed-chunk-41-1.png)<!-- --> --- # L'expression d'une région convexe -- Un polygone est convexe lorsque les angles intérieurs de ce polygone sont tous inférieurs à 180 degrés. -- .center[ ![](index_files/figure-html/unnamed-chunk-42-1.png)<!-- --> ] --- class: inverse, center, middle # Enveloppe convexe --- # L'enveloppe convexe - L'enveloppe convexe d'un objet ou d'un regroupement d'objets géométriques est l'ensemble convexe le plus petit parmi ceux qui le contiennent. - Dans un plan, l'enveloppe convexe peut être comparée à la région limitée par un élastique qui englobe tous les points et qu'on relâche jusqu'à ce qu'il se contracte au maximum. - L'idée serait la même dans l'espace avec un ballon qui se dégonflerait jusqu'à être en contact avec tous les points qui sont à la surface de l'enveloppe convexe. --- class: center, middle ![](index_files/figure-html/unnamed-chunk-43-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-44-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-45-1.png)<!-- --> --- class:middle, center, inverse # L'algorithme QuickHull --- class: center, middle ![](index_files/figure-html/unnamed-chunk-46-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-47-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-48-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-49-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-50-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-51-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-52-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-53-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-54-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-55-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-56-1.png)<!-- --> --- class: middle, center <img src="quickhull.gif" width="75%" /> --- class: middle, center, inverse # La représentation d'un polygone sous forme d'arbre --- class: middle, center ![](index_files/figure-html/unnamed-chunk-58-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-59-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-60-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-61-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-62-1.png)<!-- --> $$ P_1 = A \setminus \left( B_1 \cup B_2 \cup B_3 \right) $$ --- class: middle, center ![](index_files/figure-html/unnamed-chunk-63-1.png)<!-- --> $$ P_1 = A \setminus \left( B_1 \cup B_2 \cup B_3 \right) $$ --- class: middle, center ![](index_files/figure-html/unnamed-chunk-64-1.png)<!-- --> $$ P_1 = A \setminus \left( B_1 \cup B_2 \cup B_3 \right) $$ --- class:middle, center ![](index_files/figure-html/unnamed-chunk-65-1.png)<!-- --> $$ P_1 = A \setminus \left( B_1 \cup B_2 \cup B_3 \right) $$ --- class:middle, center ![](index_files/figure-html/unnamed-chunk-66-1.png)<!-- --> $$ P_1 = A \setminus \left( B_1 \cup B_2 \cup (C \setminus (D_1 \cup D_2)) \right) $$ --- class: middle .pull-left[ ![](index_files/figure-html/unnamed-chunk-67-1.png)<!-- --> ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-68-1.png" width="90%" /> ] $$ P_1 = A \setminus \left( B_1 \cup B_2 \cup (C \setminus (D_1 \cup D_2)) \right) $$ --- class: middle .pull-left[ ![](index_files/figure-html/unnamed-chunk-69-1.png)<!-- --> ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-70-1.png" width="80%" /> ] $$ P_1 = \left( A \setminus \left( B_1 \cup B_2 \cup (C \setminus (D_1 \cup D_2)) \right) \right) \setminus P_2 $$ --- class: inverse, center, middle # La grille booléenne --- Puisque la buse de l'imprimante est positionnée à l'aide de moteurs pas à pas (*stepper motors*), ceux-ci ne peuvent se trouver qu'à un nombre discret de positions. Nous représenterons ces positions par une grille de points ou de pixels dans le plan. .center[ ![](index_files/figure-html/unnamed-chunk-71-1.png)<!-- --> ] --- En considérant notre représentation GSC de la région à remplir comme une fonction booléenne `\(F\)` du plan, nous pouvons déterminer si les pixels sont à l'intérieur de notre région; c'est-à-dire `\(p\)` est dans la région si `\(F(p)\)` est `Vrai`. .center[ ![](index_files/figure-html/unnamed-chunk-72-1.png)<!-- --> ] --- Pour déterminer quels pixels doivent être remplis, nous pourrions évaluer la valeur de notre expression GCS pour chaque pixel. Par contre, une alternative plus efficace utilise un autre arbre quaternaire et l'obervation suivante: > Soit un rectangle `\(R\)` et un demi-plan `\(H\)`, tous les points de `\(R\)` sont dans `\(H\)` si et seulement si les quatre sommets de `\(R\)` sont dans `\(H\)`. .center[ ![](index_files/figure-html/unnamed-chunk-73-1.png)<!-- --> ] --- Pour déterminer quels pixels doivent être remplis, nous pourrions évaluer la valeur de notre expression GCS pour chaque pixel. Par contre, une alternative plus efficace utilise un autre arbre quaternaire et l'obervation suivante: > Soit un rectangle `\(R\)` et un demi-plan `\(H\)`, tous les points de `\(R\)` sont dans `\(H\)` si et seulement si les quatre sommets de `\(R\)` sont dans `\(H\)` .center[ ![](index_files/figure-html/unnamed-chunk-74-1.png)<!-- --> ] Ça ne fonctionne que si nous avons un polygone convexe! --- .pull-left[ Chaque noeud `\(A\)`, `\(B_1\)`, `\(B_2\)`, `\(C\)`, `\(D_1\)`, `\(D_2\)`, `\(D_3\)` et `\(P_2\)` de notre arbre est lui-même un sous-arbre binaire qui représente l'intersection de tous les demi-plans formant l'ensemble convexe. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-75-1.png" width="90%" /> ] --- .pull-left[ ![](index_files/figure-html/unnamed-chunk-76-1.png)<!-- --> ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-77-1.png" width="90%" /> ] --- .pull-left[ ![](index_files/figure-html/unnamed-chunk-78-1.png)<!-- --> On débute en divisant notre région en 4 rectangles et nous étudions chacun d'eux séparément. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-79-1.png" width="90%" /> ] --- .pull-left[ ![](index_files/figure-html/unnamed-chunk-80-1.png)<!-- --> Pour chacun des quatre rectangles, nous pouvons "simplifier" l'arbre en évaluant chacune des arêtes du rectangle avec les feuilles de l'arbre. Considérons les deux rectangles du haut et l'arête supérieure du trou `\(P_2\)`. En évaluant les quatre arêtes des rectangles par le demi-plan défini par l'arête supérieure du trou, nous obtenons `FAUX`. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-81-1.png" width="90%" /> ] --- .pull-left[ ![](index_files/figure-html/unnamed-chunk-82-1.png)<!-- --> En étudiant uniquement le rectangle en haut à gauche et en utilisant le même argument, aucun point de ce rectangle n'intersecte `\(B_2\)`. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-83-1.png" width="90%" /> ] --- .pull-left[ ![](index_files/figure-html/unnamed-chunk-84-1.png)<!-- --> Nous subdivisons ensuite le rectangle en haut à gauche en quatres rectangles. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-85-1.png" width="90%" /> ] --- .pull-left[ ![](index_files/figure-html/unnamed-chunk-86-1.png)<!-- --> En étudiant uniquement le sous-rectangle en haut à droite, nous remarquons qu'il n'intersecte pas les polygones `\(C\)`, `\(D_1\)` et `\(D_2\)`. ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-87-1.png" width="60%" style="display: block; margin: auto;" /> ] --- class:center, middle ![](index_files/figure-html/unnamed-chunk-88-1.png)<!-- --> --- class:inverse, center, middle # Rapetisser la grille pour tenir compte de la largeur du filament --- ## Rapetisser la grille - Maintenant que nous savons quels sont les pixels se trouvant à l'intérieur de la région, nous pouvons déterminer les pixels à ne pas inclure pour produire le chemin que doit emprunter la buse. - Nous allons poser `\(r\)` la demie-largeur de la buse. Nous voulons donc déplacer chaque arête vers l'intérieur de la région d'une distance `\(r\)`. - Pour chaque arête de notre région, nous créons un rectangle de largeur `\(r\)` et nous posons tous les pixels à l'intérieur de cette région comme `FAUX`. --- class:center,middle ![](index_files/figure-html/unnamed-chunk-89-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-90-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-91-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-92-1.png)<!-- --> --- class: center, middle ![](index_files/figure-html/unnamed-chunk-93-1.png)<!-- --> --- class:center, middle, inverse # Les hachures --- class: middle, center ![](index_files/figure-html/unnamed-chunk-94-1.png)<!-- --> --- ## Les hachures - Pour créer des hachures, on génère de nombreuses équations de droites. - Pour chacune de ces droites, on trouve les intersections de celles-ci avec les frontières de notre arbre GCS. - On place ensuite ces points en ordre sur la droite. - Pour chacun des segments reliant deux points d'intersection adjacents, on vérifie si le point milieu du segment est à *l'intérieur* ou à *l'extérieur* de notre solide. --- class: middle, center ![](index_files/figure-html/unnamed-chunk-95-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-96-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-97-1.png)<!-- --> --- class: middle, center ![](index_files/figure-html/unnamed-chunk-98-1.png)<!-- --> --- class:inverse, center, middle # Correctif lors du tracage d'arcs de cercles --- ## Arcs de cercle .pull-left[ - Lorsque la buse se déplace en ligne droite, elle dépose du matériel également de chaque côté de sa ligne centrale. - Si `\(R\)` est très grand, nous avons `\(r\approx R+t/2\)`. - Par contre, lorsqu'un arc de cercle est créé, moins de matériel est nécessaire à l'intérieur de l'arc par rapport à l'extérieur. ] .pull-right[ ![](index_files/figure-html/unnamed-chunk-99-1.png)<!-- --> ] --- ## Arcs de cercle .pull-left[ - En considérant le cercle entier, posons la circonférence du cercle `\(L=2\pi r\)`. - Pour une ligne droite ( `\(R\)` infini) nous avons `\(A_i=2\pi r \cdot t/2=\pi r t\)`. - Pour un arc de cercle ( `\(R\)` fini) nous avons `\(A_i=\pi(r^2-R^2)\)`. - En posant les deux équations précédentes égales, nous obtenons l'équation `\(r^2-rt-R^2=0\)`, qui possède la racine positive `\(r=(t+\sqrt{t^2+4R^2})/2\)`. ] .pull-right[ ![](index_files/figure-html/unnamed-chunk-100-1.png)<!-- --> ] --- <table class="table table-striped table-hover table-condensed" style="font-size: 16px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:right;"> R </th> <th style="text-align:right;"> r </th> <th style="text-align:right;"> R+t/2 </th> <th style="text-align:right;"> Différence </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1.0 </td> <td style="text-align:right;"> 1.280776 </td> <td style="text-align:right;"> 1.25 </td> <td style="text-align:right;"> 0.0307764 </td> </tr> <tr> <td style="text-align:right;"> 1.5 </td> <td style="text-align:right;"> 1.770691 </td> <td style="text-align:right;"> 1.75 </td> <td style="text-align:right;"> 0.0206906 </td> </tr> <tr> <td style="text-align:right;"> 2.0 </td> <td style="text-align:right;"> 2.265564 </td> <td style="text-align:right;"> 2.25 </td> <td style="text-align:right;"> 0.0155644 </td> </tr> <tr> <td style="text-align:right;"> 2.5 </td> <td style="text-align:right;"> 2.762469 </td> <td style="text-align:right;"> 2.75 </td> <td style="text-align:right;"> 0.0124689 </td> </tr> <tr> <td style="text-align:right;"> 3.0 </td> <td style="text-align:right;"> 3.260399 </td> <td style="text-align:right;"> 3.25 </td> <td style="text-align:right;"> 0.0103986 </td> </tr> <tr> <td style="text-align:right;"> 3.5 </td> <td style="text-align:right;"> 3.758917 </td> <td style="text-align:right;"> 3.75 </td> <td style="text-align:right;"> 0.0089172 </td> </tr> <tr> <td style="text-align:right;"> 4.0 </td> <td style="text-align:right;"> 4.257805 </td> <td style="text-align:right;"> 4.25 </td> <td style="text-align:right;"> 0.0078049 </td> </tr> <tr> <td style="text-align:right;"> 4.5 </td> <td style="text-align:right;"> 4.756939 </td> <td style="text-align:right;"> 4.75 </td> <td style="text-align:right;"> 0.0069391 </td> </tr> <tr> <td style="text-align:right;"> 5.0 </td> <td style="text-align:right;"> 5.256246 </td> <td style="text-align:right;"> 5.25 </td> <td style="text-align:right;"> 0.0062461 </td> </tr> <tr> <td style="text-align:right;"> 5.5 </td> <td style="text-align:right;"> 5.755679 </td> <td style="text-align:right;"> 5.75 </td> <td style="text-align:right;"> 0.0056789 </td> </tr> <tr> <td style="text-align:right;"> 6.0 </td> <td style="text-align:right;"> 6.255206 </td> <td style="text-align:right;"> 6.25 </td> <td style="text-align:right;"> 0.0052061 </td> </tr> <tr> <td style="text-align:right;"> 6.5 </td> <td style="text-align:right;"> 6.754806 </td> <td style="text-align:right;"> 6.75 </td> <td style="text-align:right;"> 0.0048059 </td> </tr> <tr> <td style="text-align:right;"> 7.0 </td> <td style="text-align:right;"> 7.254463 </td> <td style="text-align:right;"> 7.25 </td> <td style="text-align:right;"> 0.0044629 </td> </tr> <tr> <td style="text-align:right;"> 7.5 </td> <td style="text-align:right;"> 7.754166 </td> <td style="text-align:right;"> 7.75 </td> <td style="text-align:right;"> 0.0041655 </td> </tr> <tr> <td style="text-align:right;"> 8.0 </td> <td style="text-align:right;"> 8.253905 </td> <td style="text-align:right;"> 8.25 </td> <td style="text-align:right;"> 0.0039053 </td> </tr> <tr> <td style="text-align:right;"> 8.5 </td> <td style="text-align:right;"> 8.753676 </td> <td style="text-align:right;"> 8.75 </td> <td style="text-align:right;"> 0.0036757 </td> </tr> <tr> <td style="text-align:right;"> 9.0 </td> <td style="text-align:right;"> 9.253472 </td> <td style="text-align:right;"> 9.25 </td> <td style="text-align:right;"> 0.0034716 </td> </tr> <tr> <td style="text-align:right;"> 9.5 </td> <td style="text-align:right;"> 9.753289 </td> <td style="text-align:right;"> 9.75 </td> <td style="text-align:right;"> 0.0032889 </td> </tr> <tr> <td style="text-align:right;"> 10.0 </td> <td style="text-align:right;"> 10.253125 </td> <td style="text-align:right;"> 10.25 </td> <td style="text-align:right;"> 0.0031245 </td> </tr> </tbody> </table> --- <table class="table table-striped table-hover table-condensed" style="font-size: 16px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:right;"> R </th> <th style="text-align:right;"> r </th> <th style="text-align:right;"> R+t/2 </th> <th style="text-align:right;"> Différence </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 1.0 </td> <td style="text-align:right;"> 1.280776 </td> <td style="text-align:right;"> 1.25 </td> <td style="text-align:right;"> 0.0307764 </td> </tr> <tr> <td style="text-align:right;"> 1.5 </td> <td style="text-align:right;"> 1.770691 </td> <td style="text-align:right;"> 1.75 </td> <td style="text-align:right;"> 0.0206906 </td> </tr> <tr> <td style="text-align:right;"> 2.0 </td> <td style="text-align:right;"> 2.265564 </td> <td style="text-align:right;"> 2.25 </td> <td style="text-align:right;"> 0.0155644 </td> </tr> <tr> <td style="text-align:right;"> 2.5 </td> <td style="text-align:right;"> 2.762469 </td> <td style="text-align:right;"> 2.75 </td> <td style="text-align:right;"> 0.0124689 </td> </tr> <tr> <td style="text-align:right;"> 3.0 </td> <td style="text-align:right;"> 3.260399 </td> <td style="text-align:right;"> 3.25 </td> <td style="text-align:right;"> 0.0103986 </td> </tr> <tr> <td style="text-align:right;"> 3.5 </td> <td style="text-align:right;"> 3.758917 </td> <td style="text-align:right;"> 3.75 </td> <td style="text-align:right;"> 0.0089172 </td> </tr> <tr> <td style="text-align:right;"> 4.0 </td> <td style="text-align:right;"> 4.257805 </td> <td style="text-align:right;"> 4.25 </td> <td style="text-align:right;"> 0.0078049 </td> </tr> <tr> <td style="text-align:right;"> 4.5 </td> <td style="text-align:right;"> 4.756939 </td> <td style="text-align:right;"> 4.75 </td> <td style="text-align:right;"> 0.0069391 </td> </tr> <tr> <td style="text-align:right;"> 5.0 </td> <td style="text-align:right;"> 5.256246 </td> <td style="text-align:right;"> 5.25 </td> <td style="text-align:right;"> 0.0062461 </td> </tr> <tr> <td style="text-align:right;"> 5.5 </td> <td style="text-align:right;"> 5.755679 </td> <td style="text-align:right;"> 5.75 </td> <td style="text-align:right;"> 0.0056789 </td> </tr> <tr> <td style="text-align:right;"> 6.0 </td> <td style="text-align:right;"> 6.255206 </td> <td style="text-align:right;"> 6.25 </td> <td style="text-align:right;"> 0.0052061 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 6.5 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 6.754806 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 6.75 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0048059 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 7.0 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 7.254463 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 7.25 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0044629 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 7.5 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 7.754166 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 7.75 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0041655 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 8.0 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 8.253905 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 8.25 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0039053 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 8.5 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 8.753676 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 8.75 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0036757 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 9.0 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 9.253472 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 9.25 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0034716 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 9.5 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 9.753289 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 9.75 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0032889 </td> </tr> <tr> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 10.0 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 10.253125 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 10.25 </td> <td style="text-align:right;font-weight: bold;color: white !important;background-color: #D7261E !important;"> 0.0031245 </td> </tr> </tbody> </table> --- class: inverse, middle, center # Des questions?