<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vstoll</id>
	<title>Wiki du LAMA (UMR 5127) - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="http://os-vps418.infomaniak.ch:1250/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vstoll"/>
	<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php/Sp%C3%A9cial:Contributions/Vstoll"/>
	<updated>2026-05-21T07:43:38Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.4</generator>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15468</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15468"/>
		<updated>2024-05-20T19:03:49Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Définitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
=== Surface polygonale ===&lt;br /&gt;
&lt;br /&gt;
Donnée d&#039;un ensemble de polygône dans l&#039;espace s&#039;intersectant deux à deux suivant des arêtes&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n[f] : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2 * n[f] demies arêtes, on ajoute 1 point par face et on ajoute n[f]-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n[f] de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision √3 ====&lt;br /&gt;
&lt;br /&gt;
La subdivision √3 est utilisée sur des surfaces triangulées, c&#039;est à dire une surface composée uniquement de faces triangles.&lt;br /&gt;
&lt;br /&gt;
On commence par définir un point central sur chaque face, qu&#039;on relie à tous les autres points du triangle.&lt;br /&gt;
&lt;br /&gt;
On supprime ensuite les arêtes qu&#039;il y avait à la base si elles ne sont pas au bord et on relie les nouveaux points avec leurs voisins (les nouveaux points des faces adjacentes) par une arête.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette subdivision multiplie les faces par 3, créée 1 points par face et créée 3 arêtes par face.&lt;br /&gt;
&lt;br /&gt;
Donc si f est le nombre de face qu&#039;il y avait à la base on a :&lt;br /&gt;
&lt;br /&gt;
nombre de faces += 2f&lt;br /&gt;
&lt;br /&gt;
nombre de points += f&lt;br /&gt;
&lt;br /&gt;
nombre d&#039;arêtes += 3f&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15428</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15428"/>
		<updated>2024-05-19T16:21:20Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Subdivision √3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n[f] : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2 * n[f] demies arêtes, on ajoute 1 point par face et on ajoute n[f]-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n[f] de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision √3 ====&lt;br /&gt;
&lt;br /&gt;
La subdivision √3 est utilisée sur des surfaces triangulées, c&#039;est à dire une surface composée uniquement de faces triangles.&lt;br /&gt;
&lt;br /&gt;
On commence par définir un point central sur chaque face, qu&#039;on relie à tous les autres points du triangle.&lt;br /&gt;
&lt;br /&gt;
On supprime ensuite les arêtes qu&#039;il y avait à la base si elles ne sont pas au bord et on relie les nouveaux points avec leurs voisins (les nouveaux points des faces adjacentes) par une arête.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette subdivision multiplie les faces par 3, créée 1 points par face et créée 3 arêtes par face.&lt;br /&gt;
&lt;br /&gt;
Donc si f est le nombre de face qu&#039;il y avait à la base on a :&lt;br /&gt;
&lt;br /&gt;
nombre de faces += 2f&lt;br /&gt;
&lt;br /&gt;
nombre de points += f&lt;br /&gt;
&lt;br /&gt;
nombre d&#039;arêtes += 3f&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15425</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15425"/>
		<updated>2024-05-19T16:15:53Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Subdivision √3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n[f] : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2 * n[f] demies arêtes, on ajoute 1 point par face et on ajoute n[f]-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n[f] de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision √3 ====&lt;br /&gt;
&lt;br /&gt;
La subdivision √3 est utilisée sur des surfaces triangulées, c&#039;est à dire une surface composée uniquement de faces triangles.&lt;br /&gt;
&lt;br /&gt;
On commence par définir un point central sur chaque face, qu&#039;on relie à tous les autres points du triangle.&lt;br /&gt;
&lt;br /&gt;
On supprime ensuite les arêtes qu&#039;il y avait à la base si elles ne sont pas au bord et on relie tous les nouveaux points par des arêtes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cette subdivision multiplie les faces par 3, créée 1 points par face et créée 3 arêtes par face.&lt;br /&gt;
&lt;br /&gt;
Donc si f est le nombre de face qu&#039;il y avait à la base on a :&lt;br /&gt;
&lt;br /&gt;
nombre de faces += 2f&lt;br /&gt;
&lt;br /&gt;
nombre de points += f&lt;br /&gt;
&lt;br /&gt;
nombre d&#039;arêtes += 3f&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15424</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15424"/>
		<updated>2024-05-19T16:14:48Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Subdivision √3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n[f] : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2 * n[f] demies arêtes, on ajoute 1 point par face et on ajoute n[f]-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n[f] de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision √3 ====&lt;br /&gt;
&lt;br /&gt;
La subdivision √3 est utilisée sur des surfaces triangulées, c&#039;est à dire une surface composée uniquement de faces triangles.&lt;br /&gt;
&lt;br /&gt;
On commence par définir un point central sur chaque face, qu&#039;on relie à tous les autres points du triangle.&lt;br /&gt;
&lt;br /&gt;
On supprime ensuite les arêtes qu&#039;il y avait à la base si elles ne sont pas au bord et on relie tous les nouveaux points par des arêtes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Si la surface n&#039;a pas de bord, cette subdivision multiplie les faces par 3, créée 1 points par face et créée 3 arêtes par face.&lt;br /&gt;
&lt;br /&gt;
Donc si f est le nombre de face qu&#039;il y avait à la base on a :&lt;br /&gt;
&lt;br /&gt;
nombre de faces += 2f&lt;br /&gt;
&lt;br /&gt;
nombre de points += f&lt;br /&gt;
&lt;br /&gt;
nombre d&#039;arêtes += 3f&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15421</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15421"/>
		<updated>2024-05-19T15:57:58Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n[f] : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2 * n[f] demies arêtes, on ajoute 1 point par face et on ajoute n[f]-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n[f] de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision √3 ====&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15420</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15420"/>
		<updated>2024-05-18T20:58:26Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision √3 ====&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15419</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15419"/>
		<updated>2024-05-18T20:47:38Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Subdivision \sqrt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision √3 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15418</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15418"/>
		<updated>2024-05-18T20:46:51Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Subdivision  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision &amp;lt;math&amp;gt;\sqrt&amp;lt;/math&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15417</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15417"/>
		<updated>2024-05-18T20:46:24Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Autres aglorithmes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== Subdivision &amp;lt;math&amp;gt; ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15416</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15416"/>
		<updated>2024-05-18T20:37:50Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définit n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15415</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15415"/>
		<updated>2024-05-18T20:37:28Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créé 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15414</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15414"/>
		<updated>2024-05-18T20:37:00Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 1 - subdivision des demies arêtes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = l&#039;indice du nouveau point.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15413</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15413"/>
		<updated>2024-05-18T20:36:30Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Définitions des coordonnées des points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 points de faces des 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15412</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15412"/>
		<updated>2024-05-18T20:35:59Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Définitions des coordonnées des points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 nouveaux points créés pour les 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15411</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15411"/>
		<updated>2024-05-18T20:35:32Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Définitions des coordonnées des points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points de faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points d&#039;arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 nouveaux points créés pour les 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Pour les coordonnées des points originaux P, on commence par définir F la moyenne des n points de faces touchant P, R la moyenne du milieu des n arêtes touchants P (le milieu d&#039;une arête étant la moyenne des 2 points de l&#039;arête).&lt;br /&gt;
Les nouvelles coordonnées de P sont alors &amp;lt;math&amp;gt;\frac{F + 2R + (n-3)P}{n}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15410</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15410"/>
		<updated>2024-05-18T20:23:52Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Surface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
Une surface est un ensembles de points sur lequel il est localement possible de se repérer à l&#039;aide de deux coordonnées réelles.&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points créés pour les faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points créés pour les arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 nouveaux points créés pour les 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Les coordonnées des points originaux sont le barycentre // PAS FINI&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15409</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15409"/>
		<updated>2024-05-18T15:25:13Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Définitions des coordonnées des points */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
Les points créés pour les faces ont pour coordonnées la moyenne de tous les points originaux de la face.&lt;br /&gt;
&lt;br /&gt;
Les points créés pour les arêtes ont pour coordonnées la moyenne des 2 points de l&#039;arête et des 2 nouveaux points créés pour les 2 faces associées à l&#039;arête.&lt;br /&gt;
&lt;br /&gt;
Les coordonnées des points originaux sont le barycentre // PAS FINI&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Cube_subdivision.gif&amp;diff=15345</id>
		<title>Fichier:Cube subdivision.gif</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Cube_subdivision.gif&amp;diff=15345"/>
		<updated>2024-05-11T18:50:38Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15344</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15344"/>
		<updated>2024-05-11T18:50:07Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Exemples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube_subdivision.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15343</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15343"/>
		<updated>2024-05-11T18:49:57Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Exemples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Un cube avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:cube.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Lemming.gif&amp;diff=15342</id>
		<title>Fichier:Lemming.gif</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Lemming.gif&amp;diff=15342"/>
		<updated>2024-05-11T18:37:46Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15341</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15341"/>
		<updated>2024-05-11T18:37:35Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Exemples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:lemming.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15340</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15340"/>
		<updated>2024-05-11T18:37:14Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Exemples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
Voici l&#039;exemple d&#039;un modèle d&#039;un lemming fait main sur blender avec 0, 1, 2 et 3 subdivisions Catmull-Clark :&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15339</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15339"/>
		<updated>2024-05-11T18:27:21Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
==== Exemples ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15338</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15338"/>
		<updated>2024-05-11T18:20:16Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision,&lt;br /&gt;
&lt;br /&gt;
P = P + A/2 + F&lt;br /&gt;
&lt;br /&gt;
A = 2A + 2N&lt;br /&gt;
&lt;br /&gt;
F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15337</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15337"/>
		<updated>2024-05-11T18:20:00Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
On définie n(f) : nombre de points de la face avant la subdivision.&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision pour chaque face on ajoute 2n(f) demies arêtes, on ajoute 1 point par face et on ajoute n(f)-1 faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On définie P : nombre de points, A : nombre de demies arêtes, F : nombre de faces et N : somme de n(f) de chaque face.&lt;br /&gt;
&lt;br /&gt;
Donc après les 2 parties de la subdivision, P = P + A/2 + F, A = 2A + 2N et F = N&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15336</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15336"/>
		<updated>2024-05-11T18:11:08Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision on double encore les demies arêtes, on ajoute 1 point par face et on ajoute n-1 faces avec n le nombre de points qu&#039;il y avait .&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15335</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15335"/>
		<updated>2024-05-11T18:05:56Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
Lors de cette deuxième partie de la subdivision on double encore les demies arêtes, on ajoute 1 point par face et on ajoute (n/2)-1 faces avec n le nombre de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15334</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15334"/>
		<updated>2024-05-11T18:03:14Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 1 - subdivision des demies arêtes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15333</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15333"/>
		<updated>2024-05-11T17:59:36Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
==== Définitions des coordonnées des points ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Subdivision_face.gif&amp;diff=15332</id>
		<title>Fichier:Subdivision face.gif</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Subdivision_face.gif&amp;diff=15332"/>
		<updated>2024-05-11T17:55:58Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15331</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15331"/>
		<updated>2024-05-11T17:53:19Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subdivision_face.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15330</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15330"/>
		<updated>2024-05-11T17:52:51Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 2 - subdivision des faces */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
Pour la subdivision des faces on parcourt toutes les faces avec w_face et on créer 1 point et autant de faces qu&#039;il y avait de points sur la face avant toute subdivision.&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15329</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15329"/>
		<updated>2024-05-11T17:29:20Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 1 - subdivision des demies arêtes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de demies arêtes qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15328</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15328"/>
		<updated>2024-05-11T17:28:47Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 1 - subdivision des demies arêtes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;i&amp;lt;/strong&amp;gt; = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici n = nombre de demies arêtes qu&#039;on avait à la base et i pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15327</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15327"/>
		<updated>2024-05-11T17:28:30Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 1 - subdivision des demies arêtes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;n&amp;lt;/strong&amp;gt; = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici n = nombre de demies arêtes qu&#039;on avait à la base et i pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15325</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15325"/>
		<updated>2024-05-11T15:35:45Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici n = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici n = nombre de demies arêtes qu&#039;on avait à la base et i pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
==== Partie 2 - subdivision des faces ====&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15324</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15324"/>
		<updated>2024-05-11T15:34:29Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Partie 1 - subdivision des demies arêtes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici n = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici n = nombre de demies arêtes qu&#039;on avait à la base et i pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
Lors de cette première partie de la subdivision on double les demies arêtes et on ajoute 1 point par paire de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15323</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15323"/>
		<updated>2024-05-11T15:29:44Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
==== Partie 1 - subdivision des demies arêtes ====&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici n = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici n = nombre de demies arêtes qu&#039;on avait à la base et i pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15322</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15322"/>
		<updated>2024-05-11T15:29:00Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici n = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici n = nombre de demies arêtes qu&#039;on avait à la base et i pair&lt;br /&gt;
&lt;br /&gt;
On peut voir que la demie arête opposée d&#039;une demie arête x est égal à x+1 si x pair et x-1 si x impair, grâce à la méthode de conversion, et on va garder cette propriété tout le long de la subdivision même si elle n&#039;est pas obligatoire.&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15321</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15321"/>
		<updated>2024-05-11T15:25:24Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici n = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]] ici n = nombre de demies arêtes qu&#039;on avait à la base&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Subvidision_demie_arete.png&amp;diff=15320</id>
		<title>Fichier:Subvidision demie arete.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Subvidision_demie_arete.png&amp;diff=15320"/>
		<updated>2024-05-11T15:24:35Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15319</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15319"/>
		<updated>2024-05-11T15:24:08Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici n = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15318</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15318"/>
		<updated>2024-05-11T15:23:44Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]] ici n = nombre de points qu&#039;on avait à la base et i = nombres d&#039;itérations qu&#039;on a faites.&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Subvidision_demie_arete_points.png&amp;diff=15317</id>
		<title>Fichier:Subvidision demie arete points.png</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Fichier:Subvidision_demie_arete_points.png&amp;diff=15317"/>
		<updated>2024-05-11T15:22:20Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15316</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15316"/>
		<updated>2024-05-11T15:22:02Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:subvidision_demie_arete_points.png|300px]]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15315</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15315"/>
		<updated>2024-05-11T15:21:06Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
On aura donc besoin de créer 1 point et 2 demies arêtes par paires de demies arêtes.&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15314</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15314"/>
		<updated>2024-05-11T15:06:08Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark], je l&#039;ai décomposée en 2 parties.&lt;br /&gt;
&lt;br /&gt;
La première partie s&#039;occupe de subdiviser les arêtes tandis que la deuxième s&#039;occupe de subdiviser les faces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans la première partie, on parcourt les demies arêtes d&#039;indice pair car on va s&#039;en occuper par paires, comme pendant la conversion.&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15313</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15313"/>
		<updated>2024-05-11T15:02:19Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Catmull-Clark */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface  subdivision de surface Catmull–Clark]&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
	<entry>
		<id>http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15312</id>
		<title>Surfaces polygonales et surfaces de subdivision</title>
		<link rel="alternate" type="text/html" href="http://os-vps418.infomaniak.ch:1250/mediawiki/index.php?title=Surfaces_polygonales_et_surfaces_de_subdivision&amp;diff=15312"/>
		<updated>2024-05-11T15:01:55Z</updated>

		<summary type="html">&lt;p&gt;Vstoll : /* Algorithmes de subdivision de surface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Élève : Vetea STOLL&lt;br /&gt;
&lt;br /&gt;
Tuteur : Jacques Olivier Lachaud&lt;br /&gt;
&lt;br /&gt;
== Définitions ==&lt;br /&gt;
=== Surface ===&lt;br /&gt;
&lt;br /&gt;
== Structure de données demie arêtes ailées ==&lt;br /&gt;
=== Description ===&lt;br /&gt;
Dans cette structure de données les arêtes (ex point A et B) sont décomposée en 2 demie arêtes (A vers B et B vers A) sont définies implicitement par un indice.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Chaque demie arête a une demie arête suivante (next) une demie arête opposée (opp) un point vers lequel la demie arête pointe (to_vertex) et l&#039;indice de la face à laquelle la demie arête est associée (face), si il n&#039;y a pas de face on mettra -1 par convention.&lt;br /&gt;
&lt;br /&gt;
Pour accéder à ces paramètres on définie des listes de longueur n avec n nombre de demie arêtes pour chaque paramètre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les faces ont une demie arête associée de façon arbitraire (w_face) également pour les points (w_vertex).&lt;br /&gt;
&lt;br /&gt;
On fera également des listes pour ces paramètres de longueur n avec n nombre de face et nombre de points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La structure de donnée d&#039;un triangle ressemblera à ça :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:triangle_demie_ailee.png|300px]]&lt;br /&gt;
&lt;br /&gt;
next : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[2,5,4,1,0,3]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opp : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[1,0,3,2,5,4]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to_vertex : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;1,0,2,1,0,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
face : &amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;0,-1,0,-1,0,-1&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
w_face : &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;0&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
w_vertex : &amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#7ED957&amp;quot;&amp;gt;1,3,5&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On utilise cette structure de données car elle est plus facile à manipuler pour faire la subdivision par la suite.&lt;br /&gt;
&lt;br /&gt;
=== Conversion ===&lt;br /&gt;
&lt;br /&gt;
La structure de données qu&#039;on a est définie par une liste de faces, chaque face étant une liste contenant les index des points associés.&lt;br /&gt;
&lt;br /&gt;
Notre triangle ressemblerait alors à ça :&lt;br /&gt;
&lt;br /&gt;
faces = &amp;lt;strong&amp;gt;[ &amp;lt;strong style=&amp;quot;color:#ff5555&amp;quot;&amp;gt;[&amp;lt;strong style=&amp;quot;color:#38B6FF&amp;quot;&amp;gt;0,1,2&amp;lt;/strong&amp;gt;]&amp;lt;/strong&amp;gt; ]&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On parcourt la liste des faces et on parcourt chaque face. On a donc des arêtes définies par pointA = faces[ i ] [ j ] et pointB = faces[ i ] [ (j+1) % len(faces[ i ]) ].&lt;br /&gt;
&lt;br /&gt;
On peut alors définir une demie arête (pointA -&amp;gt; pointB) ainsi que son opposée (pointB -&amp;gt; pointA) en faisant attention attention qu&#039;elle n&#039;aie pas déjà été définie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour définir des indices aux demies arêtes il suffit de garder en mémoire le nombre d&#039;itérations qui ont eu lieu, qu&#039;on va appeler n. Chaque demie arête aura l&#039;indice 2n et chaque demie arête opposée aura l&#039;indice 2n+1&lt;br /&gt;
&lt;br /&gt;
Les listes sont alors un jeu d&#039;enfant à remplir, excepté next, en particulier quand on définie les demies arêtes opposées car on ne sait pas à l&#039;avance quel sera la demie arête suivante. On les définie alors par -1 temporairement.&lt;br /&gt;
&lt;br /&gt;
Quand l&#039;algorithme continue, si quand on veut définir une demie arête on se rend compte qu&#039;elle a déjà été créée, on met à jour ses listes next et face. Mais il reste alors les demies arêtes du bord.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir executé cette première partie de la conversion, on s&#039;occupe donc des next pour les demies arêtes opposées.&lt;br /&gt;
&lt;br /&gt;
On commence par parcourir la liste des demies arêtes au bord (celles pour lesquelles la face associée est -1) et pour chaque demie arête, on prend l&#039;opposée et tant que la demie arête n&#039;est pas au bord, on prend l&#039;opposée de la demie arête précédente (Pour trouver la demie arête précédente il suffit de prendre la demie arête suivante jusqu&#039;a ce qu&#039;on retombe sur celle que l&#039;on avait au départ, on aura donc la demie arête précédente en mémoire).&lt;br /&gt;
&lt;br /&gt;
Cette demie arête est donc la suivante de celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
=== Déconversion ===&lt;br /&gt;
La déconversion est un peu plus simple. On commence par parcourir w_face, et on rajoute le to_vertex de la demie arête dans une liste tant que la demie arête suivante n&#039;est pas celle que l&#039;on avait au départ.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:deconversion.gif|300px]]&lt;br /&gt;
&lt;br /&gt;
== Algorithmes de subdivision de surface ==&lt;br /&gt;
=== Catmull-Clark ===&lt;br /&gt;
&lt;br /&gt;
Pour mon implémentation de la [https://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface] subdivision de surface Catmull–Clark&lt;br /&gt;
&lt;br /&gt;
=== Autres aglorithmes ===&lt;br /&gt;
==== algo1 ====&lt;br /&gt;
&lt;br /&gt;
== Pourquoi cela donne une surface lisse ? ==&lt;/div&gt;</summary>
		<author><name>Vstoll</name></author>
	</entry>
</feed>