feat: rapport

Co-authored-by: Laureηt <Laurent2916@users.noreply.github.com>
This commit is contained in:
gdamms 2022-05-24 18:12:07 +02:00
parent 95cb9c2dd0
commit 0639348e14

View file

@ -5,8 +5,8 @@ Option longue 1
</h1>
<p align="center">
Laurent Fainsin &mdash;
Damien Guillotin
<a href="mailto:laurent.fainsin@etu.inp-n7.fr">Laurent Fainsin</a> &mdash;
<a href="mailto:damien.guillotin@etu.inp-n7.fr">Damien Guillotin</a>
</p>
## Description
@ -41,20 +41,33 @@ Puisque la caméra dans Minecraft ne permet pas de rotation "row", nous avons di
### Avantages / Inconvénients
Grace a cette méthode, nous pouvons interpolé des points tout en gardant le contrôle sur la courbe. On arrive donc à obtenir une courbe très maléable tout en restant stable. Parcontre, le placement des points de contrôle peut devenir assez long si l'on souhaite obtenir une trajectoire très precise étant donné qu'il y a quatre points à gérer par segment.
Un autre point positif de cette construction est que nous avons le choix de positionner les points (grâce a une commande) de sorte que la courbe soit $C^1$.
### Démonstrations mathématiques
Les polynomes de Bernstein sont definit comme étant :
$\displaystyle B_k^n(t) = \binom{n}{k} t^k (1 - t)^{n-k}$
Le $i^{ème}$ tronçon de courbe est alors définit par :
$\displaystyle S_i(t) = \sum_{k=0}^{n} P_i^k\ B_k^n(t)$
$\displaystyle S_i'(t) = n \sum_{k=0}^{n - 1} (P_i^{k + 1} - P_i^k)\ B_k^{n - 1}(t)$
Pour garder le caractère $C^1$ de la courbe, il faut donc que la dérivé en $1$ du $i^{ème}$ tronçon soit égale à la dérivé en $0$ du $i^{ème}+1$.
Soit,
$\displaystyle S_i'(1) = S_{i + 1}'(0)$
avec,
$\displaystyle S_i'(t) = n \sum_{k=0}^{n - 1} (P_i^{k + 1} - P_i^k)\ B_k^{n - 1}(t)$
Ce qui fait :
$\displaystyle n (P_i^{n} - P_i^{n - 1}) = n (P_{i + 1}^{1} - P_{i + 1}^{0})$
Le résultat $\displaystyle P_i^{n} - P_i^{n - 1} = P_{i + 1}^{1} - P_{i + 1}^{0}$ se traduit géométriquement par l'alignement et l'équidistance des points de contrôle à l'ancre à la qu'elle ils sont ratachés.
## Démonstrations
<style>
@ -65,24 +78,35 @@ video {
<table>
<tr>
<td colspan=2>
<img src="2022-05-23_17.46.36.png"/>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/tuto.webm" autoplay loop controls></video>
</td>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/circle.webm" autoplay loop controls></video>
</td>
</tr>
<tr>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/demo_show.webm" autoplay loop></video>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/waterfall.webm" autoplay loop controls></video>
</td>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/demo_noshow.webm" autoplay loop></video>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/island.webm" autoplay loop controls></video>
</td>
</tr>
<tr>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/full_show.webm" autoplay loop></video>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/demo_show.webm" autoplay loop controls></video>
</td>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/full_noshow.webm" autoplay loop></video>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/demo_noshow.webm" autoplay loop controls></video>
</td>
</tr>
<tr>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/full_show.webm" autoplay loop controls></video>
</td>
<td>
<video src="https://fainsil.users.inpt.fr/content/ModéGéom/full_noshow.webm" autoplay loop controls></video>
</td>
</tr>
</table>
@ -92,4 +116,28 @@ video {
Notre interpolation fonctionne bien, nos résultats sont satisfaisants.
Seul bémol, notre serveur fonctionne assez lentement par rapport au serveur.
Tandis qu'un client Minecraft tourne au minimum à 60 fps, notre serveur étant monothreadé, celui-ci "tourne" plutôt aux alentoour des 15 fps (ou ticks). On obtient alors un rendu peu fluide dans certains cas.
Tandis qu'un client Minecraft tourne au minimum à 60 fps, notre serveur étant monothreadé, celui-ci "tourne" plutôt aux alentour des 20 tps. On obtient alors un rendu avec quelques secousses dans certains cas.
## Les commandes utiles
`/show` permet d'afficher/cacher la courbe et les points de contrôle.
`/exec [true/false] [#start] [#end]` permet de lancer le traveling en commençant à la `#start` courbe et en s'arretant à la `#end`. L'attribut `true/false` permet de se déplacer de manière plus fluide le long de la courbe (cependant il est expérimental, il n'y a pas d'interpolation des rotations).
`/close` : ferme/ouvre la courbe et passe en mode repeat/simple.
`/point <add|rm|set|fix> [index]` \
`add` : ajoute un point à la suite de la courbe. \
`rm` : enlève le groupe de point indiqué. \
`set` : déplace le point indiqué. \
`fix` : modifie le point indiqué de sorte à ce que la courbe soit $C^1$.
`/reset` : supprime l'entièreté des points.
`/save <file>` : permet de sauvegarder les points actuels dans un fichier.
`/load <file>` : permet de charger les points dans un fichier.
`/points` : permet de lister l'ensemble de points de contrôle éxistant.
`/runas <player> <command>` : exécute une commande à la place d'un autre joueur.