Skip to content
Snippets Groups Projects
Commit 5151b80b authored by narindra.rajohnso's avatar narindra.rajohnso
Browse files

finish rapport

parent ceee46ee
No related branches found
No related tags found
No related merge requests found
Showing
with 131 additions and 541 deletions
# Ionic
## Création d'un nouvel élément ionic
Dans *ionic* on peut créer un nouvel élement facilement(page, service, component, etc...). Il suffit d'exécuter la commande suivante:
```bash
ionic generate
```
Puis il faut juste choisir l'élément à génerer dans le projet ionic et les fichiers nécessaires seront créé automatiquement en conséquence.
# Tailwind CSS
\ No newline at end of file
...@@ -3,33 +3,39 @@ hide: ...@@ -3,33 +3,39 @@ hide:
- navigation - navigation
--- ---
# Presentation de l'API
# Introduction ## Introduction
Dans ce projet, on a conçu et implémenter une application de jeu de quiz en utilisant une architecture RESTful et des sockets. L'application permet à différents utilisateurs de se connecter, de jouer et de gérer les questions et les utilisateurs. Bienvenue dans la documentation de l'API du jeu de quizz ! Cette API a été spécialement conçue pour gérer la gestion des joueurs, des questions et pour permettre de jouer à un jeu de quizz interactif. Elle a été développée en utilisant TypeScript avec Node.js et Express.
## Explication de l'API
Cette documentation détaillée vous accompagnera à travers les différentes fonctionnalités de l'API, en expliquant les ressources disponibles et les actions spécifiques accordées à chaque type d'utilisateur. Avant de plonger dans les fonctionnalités, il est essentiel de comprendre les principaux concepts de l'API.
# Ressources
L'application comprend trois types d'utilisateurs : les invités, les joueurs et les administrateurs. Chaque utilisateur est identifié par un nom d'utilisateur unique et un mot de passe. Les questions du quiz sont également des ressources importantes de l'application, comprenant la question elle-même, les réponses proposées et la catégorie associée.
L'API met à votre disposition trois types d'utilisateurs distincts : les Invités, les Joueurs et les Administrateurs. Chaque type d'utilisateur a des privilèges et des capacités spécifiques qui lui sont attribués. Les utilisateurs ont la possibilité de créer un compte, de se connecter et d'interagir avec les questions du quizz pour des expériences de jeu captivantes.
# Actions possibles en fonction du type d'utilisateur ## Ressources
Les ressources clés de cette API sont les Utilisateurs et les Questions. Les Utilisateurs sont caractérisés par un nom d'utilisateur unique, un mot de passe et un type d'utilisateur déterminant leurs permissions. Les Questions comprennent le texte de la question, une liste de réponses proposées, une réponse correcte et une catégorie associée.
Les invités peuvent créer un compte, qui sera automatiquement un compte de type joueur. Ils pourront également se connécter à leur compte respectif. Les administrateurs, quant à eux, ont des privilèges plus étendus. Ils peuvent lister, créer, mettre à jour et supprimer des questions et des utilisateurs.
## Actions possibles
Selon le type d'utilisateur, différentes actions sont rendues disponibles. Les Invités peuvent créer un compte, qui sera automatiquement configuré en tant que compte de type Joueur. Les Joueurs ont la possibilité de participer au jeu de quizz (voir partie 3). Quant aux Administrateurs, ils bénéficient de privilèges supplémentaires, tels que la gestion des questions en les listant, les créant, les mettant à jour ou les supprimant. Ils peuvent également effectuer des opérations similaires sur les utilisateurs.
# Déroulement d'une partie
Référez-vous à la documentation détaillée pour obtenir des informations précises sur chaque route ainsi que des exemples d'utilisation.
## Déroulement d'une partie
La partie commence lorsque trois joueurs sont connectés via socket.io avec un token JWT valide. À chaque partie, une question est tirée au hasard et présentée simultanément aux trois joueurs. Chaque joueur doit choisir parmi les réponses proposées. Une fois qu'un joueur a répondu, le serveur vérifie la réponse et attribue des points en fonction de la réponse donnée. La partie commence lorsque trois joueurs sont connectés via socket.io avec un token JWT valide. À chaque partie, une question est tirée au hasard et présentée simultanément aux trois joueurs. Chaque joueur doit choisir parmi les réponses proposées. Une fois qu'un joueur a répondu, le serveur vérifie la réponse et attribue des points en fonction de la réponse donnée.
Après chaque question, le serveur passe à la question suivante jusqu'à ce que dix questions aient été posées. Une fois la partie terminée(10 questions passées), le serveur affiche un classement des joueurs en fonction de leurs points. Le serveur se réinitialise alors et revient à l'étape d'attente des joueurs pour commencer une nouvelle partie. Après chaque question, le serveur passe à la question suivante jusqu'à ce que dix questions aient été posées. Une fois la partie terminée(10 questions passées), le serveur affiche un classement des joueurs en fonction de leurs points. Le serveur se réinitialise alors et revient à l'étape d'attente des joueurs pour commencer une nouvelle partie.
## Conclusion
# Conclusion Ce projet nous a permis de développer une application de jeu de quiz avec des fonctionnalités de connexion, de jeu et de gestion des questions et des utilisateurs. On a utilisé une architecture RESTful et des sockets pour permettre une expérience de jeu en temps réel. On a également implémenté différents rôles d'utilisateurs avec des privilèges spécifiques. Avec cette application, les joueurs pourront s'affronter dans des parties de quiz passionnantes et les administrateurs pourront gérer les questions et les utilisateurs de manière efficace.
\ No newline at end of file
Ce projet vous a permis de développer une application de jeu de quiz avec des fonctionnalités de connexion, de jeu et de gestion des questions et des utilisateurs. Vous avez utilisé une architecture RESTful et des sockets pour permettre une expérience de jeu en temps réel. Vous avez également implémenté différents rôles d'utilisateurs avec des privilèges spécifiques. Avec cette application, les joueurs pourront s'affronter dans des parties de quiz passionnantes et les administrateurs pourront gérer les questions et les utilisateurs de manière efficace.
\ No newline at end of file
# Tailwind CSS
Pour avoir des exemples d'interfaces utilisateurs, on s'est aider de ces sites:
1. [Flowbite](https://flowbite.com/)
2. [Taiwind CSS](https://tailwindcss.com/)
\ No newline at end of file
# Problèmes éventuels
Lors du développement de notre application en temps réel, nous avons identifié les problèmes suivants :
## Reconnexion automatique après le redémarrage du serveur
Après s'être déconnectés du frontend et s'être désabonnés des événements du serveur, les utilisateurs peuvent se reconnecter automatiquement lorsque le serveur redémarre. Cela est dû au fait que la déconnexion côté frontend ne supprime pas directement la session du serveur, laissant les connexions précédentes actives.
Pour résoudre ce problème, des mécanismes supplémentaires doivent être mis en place du côté du serveur. Cela peut impliquer l'enregistrement des informations de connexion dans une base de données ou tout autre moyen de stockage persistant, afin de gérer les reconnexions après le redémarrage du serveur de manière appropriée.
De plus, l'utilisation de mécanismes avancés de session et d'authentification, tels que les tokens JWT avec des expirations courtes, peut renforcer la sécurité et empêcher les utilisateurs de se reconnecter automatiquement après le redémarrage du serveur.
\ No newline at end of file
---
hide:
- navigation
---
## Prérequis
Assurez-vous d'avoir les éléments suivants installés sur votre système :
`Node.js` : On peut le télécharger et l'installer à partir du site officiel de Node.js : [https://nodejs.org](https://nodejs.org)
## Procédure d'installation
#### Installation des dépendances
Pour installer les dépendances nécessaires au projet, on exécute la commande suivante(après avoir cloner le repo):
```bash
npm install
```
Cette commande est à faire que ce soit pour le frontend ou le backend.
### Frontend
#### Installation d'Angular CLI
Angular CLI (Command Line Interface) est un outil en ligne de commande qui facilite la création et la gestion de projets Angular. Pour l'installer, ouvrez votre terminal ou votre invite de commandes et exécutez la commande suivante :
```bash
npm install -g @angular/cli
```
Cela téléchargera et installera Angular CLI globalement sur votre système.
#### Création d'un nouveau projet Angular
Une fois que Angular CLI est installé, on peut créer un nouveau projet Angular en exécutant la commande suivante dans votre terminal :
```bash
ng new nom-du-projet
```
## Procédure d'utilisation
### Accéder au répertoire du projet
Après la création du projet, on accède au répertoire du projet en utilisant la commande suivante :
```bash
cd nom-du-projet
```
### Frontend
#### Exécution du serveur de développement
Pour lancer le serveur de développement d'Angular, exécutez la commande suivante :
```bash
ng serve --open
```
Cela va compiler le projet et lancer un serveur de développement. On peut maintenant accéder à l'application en ouvrant votre navigateur et en accédant à l'URL suivante : http://localhost:4200
Toute modification qu'on apportera au code sera automatiquement détectée et l'application sera rechargée en conséquence.
### Backend
Pour lancer le backend express, utilisez la commande suivante :
```bash
npm run start:dev
```
\ No newline at end of file
---
hide:
- navigation
---
# Répartition de travail
Notre projet a été réalisé en équipe, avec une répartition claire des tâches entre les membres. Voici la répartition de travail effectuée :
## Steven :
### Mise en place des routes du backend :
Chargé de concevoir et d'implémenter les différentes routes de l'API utilisées par notre application. Cela inclut la gestion des requêtes HTTP pour récupérer, créer, mettre à jour et supprimer les données.
### Gestion des sockets avec Express :
Configuration initiale des sockets avec Express, permettant la communication en temps réel entre le serveur et le client.
## David :
### Mis en place de la base de données:
Mis en place du système de gestion de base de données relationnelle. Utilisation de Sequelize comme ORM pour interagir avec la base de données.
### Gestion du token entre le frontend et le backend :
Mis en place du système d'authentification basé sur les tokens entre le frontend et le backend. Cela comprend la génération et la vérification des tokens, ainsi que leur transmission sécurisée entre les deux parties.
### Développement du frontend en Angular :
Responsabilité de concevoir et de développer l'interface utilisateur de notre application en utilisant le framework Angular. Cela implique la création des composants, des services et des directives nécessaires pour fournir une expérience utilisateur fluide et réactive.
# ISC_L411 - Algorithmes avancés
## Parcours de graphes
### Parcours en profondeur (Depth-First Search ou DFS)
Principe :
- Parcours un sommet non-visité jusqu'à un cul-de-sac
- Chaque sommet parcouru est noté comme *visité*
- Si bloqué, retourne en arrière jusqu'au dernier sommet avec un chemin possible
- Se termine une fois tous les sommets visités
<figure markdown>
![Parcours en profondeur](./img/dpf.png){ width="500"}
<figcaption>L'ordre des noeuds visités avec un parcours en profondeur</figcaption>
</figure>
### Parcours en largeur (Breadth-First Search ou BFS)
Principe :
- Commence à la racine et note sa profondeur à 0
- Parcours les voisins et note leur profondeur à 1
- Pour chaque noeuds de profondeur 1, parcours les voisins et note leur profondeur à 2
- Se termine une fois tous les sommets parcourus.
!!! note
Indiquer la profondeur des noeuds permet de connaître leur distance par rapport au
noeud racine. Ceci permet de visualiser la profondeur au sein d'un graphe.
<figure markdown>
![Parcours en profondeur](./img/bft.png){ width="500"}
<figcaption>L'ordre des noeuds visités avec un parcours en largeur</figcaption>
</figure>
\ No newline at end of file
# ISC_L412 - Géométrie algorithmique
!!! warning "Attention"
Les informations se trouvant sur cette page sont incomplètes, peuvent contenir des erreurs et/ou nécessitent une
meilleure mise en page.
## Les normales
## Vecteurs
## Modèle de données de stockage des maillages
### Tableaux de sommets
Il est possible de représenter des maillages à l'aide d'un tableaux de sommets :
<figure markdown>
![Tableaux de sommets](./img/half-edge.png)
<figcaption>Tableaux de sommets</figcaption>
</figure>
### Half-Edge
Une autre représentation possible est via la structure de données *Half-Edge*.
Cette structure est composé de 3 éléments principaux :
- **Sommet** (vertex) : représente un point
- **Face** : une surface fermée dans le maillage
- **Demi-arête** (half-edge)
- Correspond à un bord orienté du maillage
- Est associé à un sommet initial, une face qui la contient et une demi-arête opposée
<figure markdown>
![Diagramme](./img/mesh.png){ width="600" }
<figcaption>Diagramme d'un mesh</figcaption>
</figure>
<figure markdown>
![Représentation](./img/records.png)
<figcaption>Représentation half-edge</figcaption>
</figure>
Cette représentation offre une grande libertée de traitements possibles sur des maillages.
## Éclairage Phong
Le modèle d'illumination de Phong permet de calculer de manière crédible la lumière réfléchie par un point étudié.
<figure markdown>
![Visualisation de l'équation Phong](./img/Phong_components.png)
<figcaption>Visualisation de l'équation Phong</figcaption>
</figure>
Ce modèle est séparé en 3 composantes :
- lumière **ambiante**
- lumière **diffuse**
- lumière **spéculaire**
### Lumière ambiante
Lorsqu’un point n’est pas directement éclairé par une source, il apparaitra complètement noir.
La lumière ambiante est supposée égale en tout point de l'espace
### Lumière diffuse
Représente l'intensité qui repart en tenant compte de l'inclinaison avec laquelle la lumière incidente arrive sur la
surface, mais en supposant que l'intensité est la même quelle que soit la direction que prend le rayon réfléchi.
Ainsi, les surfaces rugueuse créées des ombres douces.
### Lumière spéculaire
La spécularité traduit l’aspect « brillant » de l’objet.
La réflexion spéculaire provient de la réflexion des rayons lumineux sur l’objet.
Ainsi, les surfaces lisses créées des reflets brillants.
## Ombrage de Gouraud (interpolation)
## Indicateurs de qualités
## Ressources
- [Half-Edge Data Structures](https://jerryyin.info/geometry-processing-algorithms/half-edge/)
\ No newline at end of file
Documentation/docs/theory/img/Phong_components.png

46.9 KiB

Documentation/docs/theory/img/bft.png

613 KiB

Documentation/docs/theory/img/dihedral.png

77 KiB

Documentation/docs/theory/img/dpf.png

605 KiB

Documentation/docs/theory/img/half-edge.png

64.5 KiB

Documentation/docs/theory/img/mesh.png

37 KiB

Documentation/docs/theory/img/records.png

29.3 KiB

# Indicateurs de qualité
!!! warning "Attention"
Les informations se trouvant sur cette page sont incomplètes, peuvent contenir des erreurs et/ou nécessitent une
meilleure mise en page.
Quality checks summary :
1. Aspect Ratio should not go beyond 5
2. Warp angle should not be more than 45°
3. Jacobian should not be less than 0.5
4. Tet collapse should be greater than 0.1
## Element Quality
>"The Element Quality is based on the ratio of the volume to the sum of the square of the edge lengths for 2D quad/tri elements, or the square root of the cube of the sum of the square of the edge lengths for 3D elements.
>The Element Quality is a composite quality metric that ranges between 0 and 1.
>A value of 1 indicates a perfect cube or square while a value of 0 indicates that the element has a zero or negative volume."
[source](https://featips.com/2022/11/21/ansys-mesh-metrics-explained/)
$Element Quality (2D) = C \times \frac{area}{\sum edge \space length^2 }$, namely:
$Element Quality (2D) = 4\sqrt 3 \times \frac{area}{a^2 + b^2 + c^2 }$, namely:
$Element Quality (2D) = 6.928 \times \frac{area}{a^2 + b^2 + c^2 }$
For 3D elements, the formula is:
$Element Quality (3D) = C \times \frac{volume}{(\sqrt{\sum edge \space length^2) ^3 }}$
## Dihedral angle between two faces
The dihedral angle between two faces is the value:
$\pi \pm arccos<\vec{n_1}, \vec{n_2}>$
depending on the configuration of the two faces with respect to $\vec{n_i}$, the normals of the faces under interest.
![Dihedral angle illustration](img/dihedral.png)
## Tet collapse
$Tet Collapse = min \space of(\frac{h}{\sqrt{A} \times 1.24})$
![Tet collapse](https://sklc-tinymce-2021.s3.amazonaws.com/comp/2022/09/2%20(24)_1662385923.png)
(from page 593 of Pascal Jean Frey, Paul L. George - Mesh Generation_ Application to Finite Elements (2000, Hermès Science))
[source from skill lync](https://skill-lync.com/blogs/technical-blogs/cfd-how-to-solve-tet-collapses-in-tetra-unstructured-mesh)
## Aire des triangles
!!! quote "Objectif"
Mesurez l'aire de chaque triangle dans le maillage. Des triangles trop petits ou trop grands peuvent indiquer un
maillage de mauvaise qualité.
Cet indicateur mesure la taille de chaque triangle du maillage. Les triangles trop petits peuvent causer des problèmes
de précision, tandis que les triangles trop grands peuvent causer des problèmes de performances. Un maillage de bonne
qualité aura des triangles de tailles similaires.
## Qualité de l'arête
!!! quote "Objectif"
Évaluez la longueur des arêtes du maillage. Les arêtes trop courtes ou trop longues peuvent entraîner une mauvaise
qualité.
There are different indicators that can be used to measure the quality of edges in a mesh.
Here are a few examples:
- Aspect Ratio. See below.
- various measures of angles (minimum or maximum)
- Maximum Angle: Largest angle between adjacent edges of the element is reported.
- Minimum Angle: Smallest angle between adjacent edges of the element is reported.
## Taux de régularité
!!! quote "Objectif"
Calculez le pourcentage de triangles ayant un rapport d'aspect proche de 1. Un taux élevé de régularité indique un
maillage de meilleure qualité.
*Aussi appelé rapport d'aspect.*
The aspect ratio is a measure of the quality that is used in mesh generation and measures the ratio of the longest edge to the shortest edge of a simplex. The closer the aspect ratio is to 1, the better the simplex is.
The ratio of the longest edge to the shortest edge of a simplex is another measure of aspect ratio. In fact, it is a common way to define aspect ratio for triangles. The longer the longest edge is relative to the shortest edge, the larger the aspect ratio. This can be expressed mathematically as:
$$AR = \frac{l_{max}}{l_{min}}$$
where $l_{max}$ is the length of the longest edge and $l_{min}$ is the length of the shortest edge. This definition is specific to triangles and is not applicable to other types of simplices like tetrahedra.
The aspect ratio defined in terms of the inscribed radius and the longest edge, as described earlier, is a more general definition that can be applied to simplices of any dimension. It is also related to the ratio of the circumradius to the inradius, which is another measure of shape quality for simplices.
REFERENCE PLEASE???????
The aspect ratio of a given simplex K is defined by $Q_K = \alpha_2 \frac{h_{max}}{\rho_K}$, where K is a simplex, $h_{max}$ is the element diameter, aka its longest edge. $\rho_K$ is the radius of the inscribed circle, and $\alpha_2$ is a normalization factor that depends on the dimension of the simplex. For a triangle, $\alpha_2 = \frac{\sqrt{3}}{6}$.
The aspect ratio is a measure of the quality of the simplex. The closer the aspect ratio is to 1, the better the simplex is.
In two dimensions, a triangle is a simplex
A simplex is always considered a connected and closed set, meaning that all the points in the simplex are connected to each other by straight line segments, and the simplex includes all of its boundary points.
## Angle minimal et maximal
!!! quote "Objectif"
Évaluez les angles minimaux et maximaux de chaque triangle. Les angles trop aigus ou trop obtus peuvent réduire la
qualité du maillage.
Maximum and minimum interior angles are evaluated independently for triangles and quadrilaterals.
Cet indicateur mesure l'angle formé par les côtés de chaque triangle du maillage. Les angles trop petits peuvent causer
des problèmes de précision, tandis que les angles trop grands peuvent causer des problèmes de stabilité numérique. Un
maillage de bonne qualité aura des angles de triangle qui sont proches de 60 degrés.
## Distribution des sommets
!!! quote "Objectif"
Analysez la répartition des sommets dans le maillage. Une répartition uniforme des sommets est généralement
souhaitable pour un maillage de bonne qualité.
### Histogramme de la densité de sommets
On peut diviser le domaine du maillage en petites zones et compter le nombre de sommets dans chaque zone. Ensuite, on
peut représenter ces données sous forme d'un histogramme de la densité de sommets. Un histogramme uniforme indique une
répartition uniforme des sommets dans le maillage. Un histogramme non uniforme indique une mauvaise répartition des
sommets dans le maillage.
### Voronoi diagram
This is a way to partition space into regions based on the proximity to a set of points, such as the vertices in a mesh.
The Voronoi diagram can be used to analyze the distribution of vertices by calculating the areas of the Voronoi polygons
associated with each vertex. A well-distributed mesh would have Voronoi polygons with similar areas, while a poorly
distributed mesh would have large variations in the Voronoi polygon areas.
### Vertex quality index
The formula for calculating the vertex quality index is:
$$
\frac{1}{N}\sum_{i=1}^{N} \sqrt{(x_i - \bar{x})^2 + (y_i - \bar{y})^2 + (z_i - \bar{z})^2}
$$
where $N$ is the total number of vertices in the mesh, $(x_i, y_i, z_i)$ are the coordinates of the $i$-th vertex, and $(\bar{x}, \bar{y}, \bar{z})$ are the coordinates of the center of gravity of the mesh.
## Ratio de la taille des éléments voisins
!!! quote "Objectif"
Évaluez le rapport entre la taille des éléments voisins dans le maillage. Des ratios trop élevés ou trop faibles
peuvent indiquer une mauvaise qualité de maillage.
The ratio of neighboring element sizes is an important measure of the quality of a mesh. It evaluates the ratio between the sizes of neighboring elements, such as triangles or quadrilaterals, in the mesh. A ratio that is too high or too low can indicate poor mesh quality and distortion in the shape of the object.
The ratio of neighboring element sizes can be calculated by computing the ratio of the maximum size to the minimum size for each element. This can be done by dividing the maximum size of the neighboring elements by the minimum size of the neighboring elements.
## Connectivité des sommets
!!! quote "Objectif"
Analysez la connectivité des sommets dans le maillage. Un nombre élevé de sommets connectés à un seul sommet peut
indiquer une mauvaise qualité.
The connectivity of the vertices in a mesh refers to the number of edges that connect a vertex to other vertices. This metric measures how well the mesh is connected and can indicate the presence of isolated or poorly connected vertices.
## Cohérence des normales
!!! quote "Objectif"
Vérifiez que les normales des faces adjacentes sont cohérentes et pointent dans la même direction générale. Les
inversions de normales peuvent causer des problèmes de rendu et d'ombrage
The coherence of normals refers to the consistency of the direction of the surface normal vectors across adjacent faces in a mesh. In computer graphics, surface normals are used to determine how light interacts with the surface, and inconsistent normals can cause visual artifacts in the rendering.
## Surface's normal vectors
"Cohérence des normales", "angle entre les normales", and "divergence des normales" are all measures of the quality of a mesh's surface. However, they each focus on different aspects of the surface's normal vectors:
### Cohérence des normales
This measure checks that the normal vectors of adjacent faces are consistent and pointing in the same general direction.
Inconsistencies in normal vectors can cause rendering and shading issues.
### Angle entre les normales
This measure calculates the angle between the normal vectors of adjacent faces. A small angle indicates a smooth surface,
while a large angle can indicate a discontinuity or sharp edge in the surface.
### Divergence des normales
This measure checks for abrupt changes in the normal vectors across the surface of the mesh. High divergence can
indicate surface irregularities or singularities.
### Résumé
While "cohérence des normales" and "angle entre les normales" focus on the direction and angle of the normal vectors
respectively, "divergence des normales" looks for abrupt changes in the normal vectors across the surface of the mesh.
## Normales de sommet pondérées
!!! quote "Objectif"
Calculez les normales de sommet pondérées en fonction de l'aire des faces adjacentes. Des normales de sommet
pondérées incohérentes peuvent indiquer des problèmes de qualité du maillage.
Weighted vertex normals are commonly used in computer graphics to produce smooth shading on curved surfaces. Each vertex normal is the average of the surface normals of all adjacent faces, weighted by the area of each face. This weighting ensures that larger faces have a greater influence on the final normal, resulting in a smoother transition between adjacent faces.
The calculation of weighted vertex normals is straightforward, but if the mesh has poor quality (such as non-manifold edges or self-intersections), the resulting normals may be inconsistent and lead to visual artifacts in the rendered image.
To calculate the weighted vertex normal for a vertex V, you can follow these steps:
- Find all adjacent faces to vertex V.
- Calculate the surface normal for each adjacent face.
- Weight each surface normal by the area of its corresponding face.
- Sum the weighted surface normals.
- Normalize the sum to obtain the final vertex normal.
- Inconsistent weighted vertex normals can result from problems in the mesh geometry, such as non-manifold edges or self-intersections.
- These problems can cause faces to have overlapping or contradictory normals, leading to visual artifacts such as shading seams or incorrect lighting. Therefore, ensuring consistent and accurate weighted vertex normals is an important aspect of mesh quality assessment.
## Gradient des normales
!!! quote "Objectif"
Évaluez le gradient des normales des sommets voisins. Un gradient faible des normales indique un maillage plus lisse.
The "gradient of normals" is a measure of how much the normals of neighboring vertices change in direction and magnitude. This can be computed by taking the difference between the normal vectors of neighboring vertices and computing the magnitude of the resulting vector. A low gradient of normals indicates a smoother mesh, where the normals change gradually from one vertex to another, while a high gradient of normals indicates that the mesh has abrupt changes in surface orientation. This can cause shading and rendering problems.
The gradient of normals is an important quality metric in computer graphics and is used to evaluate the smoothness of a mesh. It is commonly used in applications such as 3D modeling, animation, and virtual reality.
# Optimisation
## Mesures choisies
Les mesures suivantes ont été choisies pour déterminer la qualité d'un mesh :
- le taux de régularité (aspect ratio)
- l'asymétrie (skewness), calculée par l'écart d'angle normalisé
- l'angle minimum/maximum
# Autre mesures de qualité
!!! warning "Attention"
Les informations se trouvant sur cette page sont incomplètes, peuvent contenir des erreurs et/ou nécessitent une
meilleure mise en page.
## Skewness
Skewness is the deviation between the optimal cell size to the existing cell size. The range of skewness is between 0
(ideal) to 1 (worst). Highly skewed cells are not preferred due to the poor accuracy they cause within the interpolated
regions.
Il existe 2 méthodes pour calculer le niveau de *skewness*.
### Angular Measure
Calculation of Skewness for Triangular/Quadrilateral Elements
The warp angle is a measure of the quality that is used in mesh generation and measures the angle between the normals of two adjacent faces. The closer the warp angle is to 0, the better the mesh is.
For a triangle, the warp angle is defined as the angle between the normals of the two adjacent faces.
Skew of triangular elements is calculated by finding the minimum angle between the vector from each node to the opposing mid-side, and the vector between the two adjacent mid-sides at each node of the element.
The warp angle is a measure of the quality of the mesh. The closer the warp angle is to 0, the better the mesh is.
Skewness= 90-min(Θ1, Θ2….. Θ6)
where Θ1, Θ2….. Θ6 are the angles between the vectors from each node to the opposing mid-side, and the vector between the two adjacent mid-sides at each node of the element.
For Equilateral Triangle, Θ1, Θ2….. Θ6 = 90 degree
Hence, Skewness = 0 degree
### Normalized angle deviation
Calculation of Skewness for Triangular/Quadrilateral Elements
​$skewness = max[\frac{\theta_{max} - \theta_e}{180-\theta_e}, \frac{\theta_e - \theta_{min}}{\theta_e}]$
In the normalized angle deviation method, skewness is defined (in general) as "maximum of ratio of Angular deviation from Ideal element.
θmax = Largest Angle in the face or cell
θmin = Smallest Angle in the face or cell
θe = Angle for an equi-angular face or cell
where, θe = 60 ̊ for Equilateral Triangle and 90 ̊ for Square
## Qualité de l'angle dièdre
!!! quote "Objectif"
Calculez l'angle dièdre entre les faces adjacentes. Les angles dièdres trop petits ou trop grands peuvent indiquer des problèmes de qualité.
The dihedral angle is the angle formed by the intersection of two adjacent faces in a 3D mesh.
![dihedral angle](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Dihedral_angle.svg/220px-Dihedral_angle.svg.png)
Angle between two half-planes (α, β, pale blue) in a third plane (red) which cuts the line of intersection at right angles.
Cet indicateur mesure l'angle formé entre deux triangles adjacents. Les angles dièdres trop grands ou trop petits
peuvent causer des problèmes de stabilité numérique et de déformation. Un maillage de bonne qualité aura des angles
dièdres proches de 180 degrés.
## Angle entre les normales
!!! quote "Objectif"
Calculez l'angle entre les normales des faces adjacentes. Un angle faible entre les normales adjacentes indique une surface lisse, tandis qu'un angle important indique une discontinuité ou une arête vive.
## Angle entre les normales de sommet et la normale de la face
!!! quote "Objectif"
Mesurez l'angle entre les normales de sommet et la normale de la face associée. Un angle faible indique que les
normales de sommet et les normales de face sont bien alignées.
## Écart-type des angles de normales
!!! quote "Objectif"
Calculez l'écart-type des angles entre les normales des faces adjacentes. Un écart-type faible indique un maillage
lisse et régulier, tandis qu'un écart-type élevé peut indiquer des problèmes de qualité.
Non-orthogonality is the angle between the vector connecting two adjacent cell centers and the normal of the face shared
by these cells. The range of non-orthogonality is between 0 (ideal) and 90 (worst). 0 indicates the mesh being
orthogonal. Two perfect hexes aligned with each other have non-orthogonality equal to 0.
## Length (min)
Minimum element lengths are calculated using one of two methods.
The shortest edge of the element. This method is used for non-tetrahedral 3D elements.
The shortest distance from a corner node to its opposing edge (or face, in the case of tetra elements); referred to as
"minimal normalized height".
## Warpage
Amount by which an element, or in the case of solid elements, an element face, deviates from being planar. Since three points define a plane, this check only applies to quads. The quad is divided into two trias along its diagonal, and the angle between the trias’ normals is measured.
Warpage of up to five degrees is generally acceptable.
### Rappel
Quality checks summary :
1. Aspect Ratio should not go beyond 5
2. Warp angle should not be more than 45°
3. Jacobian should not be less than 0.5
4. Tet collapse should be greater than 0.1
### Table Summarised ANSYS Style
This table is summarised and based on the ANSYS Mesh Metrics Explained article
| Indicateur | Valeurs sans warning| Valeurs idéales | Valeurs qui peuvent causer des erreurs |
|------------|---------|-------- | -----------------|
| Angle maximal (maximum corner angle) | 20° - 165° | 60° | 179.9° |
| Skewness | 0 - 0.75 | 0 | - |
| aspect ratio | 1 - 20 | 1 | 1e6 |
| wraping factor | 0 - 5 | 0 | 7 |
![ANSYS Mesh Metrics Summary](https://featips.com/wp-content/uploads/2022/11/image-35.png)
Parallel deviation and warping factor brick don't apply to our project as we deal with triangles and tetrahedrons only.
### Table Summarised GB 33582 Style
This table is based on the standard GB/T 33582-2017 General principles of structural finite element analysis for mechanical products
| Indicateur | 2D triangles | 3D tetrahedrons |
|------------|---------|-------- |
| Angle maximal (maximum corner angle) | 20° - 120° | 20° - 120° |
| Skewness | <= 60° | <=60° |
| aspect ratio | 1 - 5 | 1 - 5 |
| wraping factor | - | - |
| Tet collapse | - | 0.1 - 1 |
Remarque: Tet collapse is not applicable to 2D triangles. The ideal value of tet collapse is 1. The higher the value the better the quality of the tetrahedron.
## Valeurs acceptables in more details
[Source: ANSYS Mesh Metrics Explained](https://featips.com/2022/11/21/ansys-mesh-metrics-explained/)
### skewness and cell quality
| value of skewness | cell quality |
|-------------------|--------------|
| 0.0 - 0.25 | excellent |
| 0.25 - 0.5 | good |
| 0.5 - 0.75 | fair |
| 0.75 - 0.9 | poor |
| 0.9 - <1.0 | very poor |
| 1.0 | degenerate |
| >1.0 | invalid |
![skewness](https://featips.com/wp-content/uploads/2022/11/image-31.png)
### Warping factor
![warping factor](https://featips.com/wp-content/uploads/2022/11/image-26.png)
This factor measures if the shell is on the same plane or not. If 0 then yes, if not 0 then warped. The bigger the value of warping factor the more warped the shell is. The highest acceptable value is 5. There would be calculation errors if the value is higher than 7.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment