Nouveau prototype de disque de Poincaré navigable avec Unity

Le proto nouveau est arrivé !

Enfin un nouveau prototype de disque de Poincaré, conçu avec Unity ! Le but est de pouvoir toujours plus s’immerger à l’intérieur du disque de Poincaré pour voir comment notre perception se fait dans un tel espace. Je sens que vous mourez d’envie d’essayer, alors j’ai mis à votre disposition quelques builds sur mon Drive, disponibles à l’adresse suivante :
https://drive.google.com/drive/folders/16g5AYBFBTsjp02tXX5SIMWKZ_SG-aM86?usp=sharing

S’il n’y a pas de version correspondant à votre système, n’hésitez à demander.
Par ailleurs, j’ai testé la version OSX, qui fonctionne bien malgré un ou deux petits bugs d’affichage, mais pas les autres… Vous aurez donc peut-être une mauvaise surprise (mais j’espère que vous en aurez plutôt une bonne!).

Alors, c’est fini ?

Je ne suis encore pas tout à fait satisfait du résultat (le contraire aurait été surprenant), mais c’est une étape de plus dans l’élaboration de ce que j’imagine. Dans l’idéal, il manque encore :

  • Que le disque entier change de géométrie et se construise au fil des déplacements sur celui-ci. Pour l’instant, seule la taille du mobile change, mais le moteur de jeu arrondit rapidement à zéro les différentes valeurs utiles (vitesse, échelle) lorsqu’on se rapproche du bord. Il faudrait donc n’afficher qu’une portion du disque, sans doute avec un vaisseau plus petit au départ, dont les proportions sont rééquilibrées par rapport au moteur de jeu (agrandissement de l’échelle globale quand on se rapproche du bord, et compensation de l’échelle locale du mobile en fonction de l’échelle globale.
  • Un système immersif sur le nez ! Pour sentir ce que c’est qu’être perdu dans un disque de Poincaré, sans repère, à la recherche du centre du disque 😉
  • Un pavage qui rend mieux compte du fait que les formes sont conservées, d’une certaine manière, en tout lieu. Le pavage actuel est généré par un script, mais il ne me convient pas très bien. Cependant, pour faire un pavage comme ceux de Escher, il va me falloir encore un peu de travail ^^’.
Circle Limit III
1959 Woodcut, second state, in yellow, green, blue, brown and black, printed from 5 blocks.
https://www.mcescher.com/gallery/recognition-success/circle-limit-iii/

Mais comment t’as fait ? ‘Oo

Pour ce nouveau prototype, j’ai effectué la résolution géométrique, puis analytique, du problème. Je rappelle que le dernier prototype faisait une résolution physique du problème en calculant la déformation de trajectoire à partir de la différence de vitesse entre deux mobiles situés sur la gauche et la droite du mobile de référence comme sur un essieu ; comme la vitesse décroit avec la distance au centre, le mobile le plus près du centre va plus vite que celui le plus éloigné, ce qui induit la déviation du mobile de référence. C’est le mécanisme inverse de celui du différentiel qui équipe nos voitures.
Or cette résolution physique a deux inconvénients :

  • le modèle est peu stable et peu précis, puisque les deux « roues » du mobile sont à une certaine distance du mobile lui-même, même petite, et que les calculs sont effectués séquentiellement (d’abord les « roues » avancent, puis la position moyenne du mobile est calculée en tenant compte des contraintes mécaniques, ce qui induit des sursauts du mobile) ;
  • il ne permet pas de gérer d’autres phénomènes physiques qui interfèrent avec lui, tels que les collisions avec d’autres mobiles ;
  • il consomme beaucoup de ressources, puisqu’il utilise le moteur physique pour un calcul simple de trajectoire.

Le nouveau modèle, issu de la résolution analytique, n’a pas ces inconvénients, et permet en outre de tracer des lignes droites — c’est-à-dire des arcs de cercles dans le disque de Poincaré — pour paver le disque.

Cette résolution est assez simple, puisqu’on a 4 équations polynomiales d’ordre 2 (qui se simplifient en équations d’ordre 1 ^^) et 4 inconnues. Voici le problème graphique de départ :

Représentation du problème (GeoGebra)

Le cercle noir est le disque de Poincaré, le point M(x,y) est le mobile, avec son vecteur vitesse (dont on n’utilise que la direction, pas le module), le cercle rouge est la trajectoire du mobile. Le point C est le centre du cercle rouge, et le point P est le point d’intersection entre les deux cercles. On cherche les coordonnées du point C. Comme on a introduit le point P pour la résolution, on a aussi besoin d’éliminer ses coordonnées. En coordonnées cartésiennes, on a donc 4 inconnues.
Les 4 équations s’obtiennent grâce aux contraintes suivantes :
\vec{V} est orthogonal à \overrightarrow{MC} ;
(PO) est perpendiculaire à (PC) ;
PO est égal au rayon du disque ;
PO est égal à PC.
Le résultat à la fin des calculs est :

(1)   \begin{equation*} \left\lbrace \begin{array}{rcl} x_C & = & x - \dfrac{R^2 + x^2 + y^2}{2 (x - \dfrac{V_x}{V_y}y)}\\ y_C & = & y - \dfrac{R^2 + x^2 + y^2}{2 (y - \dfrac{V_y}{V_x}x)}\\ \end{array}\right. \end{equation*}

On peut rédiger cela plus élégamment en introduisant la distance OM et des produits scalaires et vectoriels, mais le but est de pouvoir l’utiliser dans Unity. D’ailleurs, voici ce que ça donne en C# :

var pos = hyperbolicObject.transform.position;
float dirRatio = hyperbolicObject.transform.forward.x / hyperbolicObject.transform.forward.z;
float num = pos.x * pos.x + pos.z * pos.z - DISCWORLD_RADIUS * DISCWORLD_RADIUS;
float xminxc = num / (2 * (pos.x - pos.z * dirRatio));
float zminzc = num / (2 * (pos.z - pos.x / dirRatio));
center.Set(pos.x - xminxc, pos.y, pos.z - zminzc);
radius = Mathf.Sqrt(xminxc * xminxc + zminzc * zminzc);

Et graphiquement ?

Le pavage est réalisé en créant par script des meshes qui correspondent aux trajectoires calculées depuis certains points. La ligne rouge que l’on voit devant le mobile est la trajectoire actuelle du mobile en ligne droite, qui rend compte aussi du changement d’échelle.

Ça vient d’où déjà ?

Pour rappel, voici l’extrait de La science et l’hypothèse de Henri Poincaré dont est issu ce disque :

La température n’y est pas uniforme ; elle est maxima au centre, et elle diminue à mesure qu’on s’en éloigne, pour se réduire au zéro absolu quand on atteint la sphère où ce monde est renfermé.
Je précise davantage la loi suivant laquelle varie cette température. Soit R le rayon de la sphère limite ; soit r la distance du point considéré au centre de cette sphère. La température absolue sera proportionnelle à R^2 - r^2.
Je supposerai de plus que, dans ce monde, tous les corps aient même coefficient de dilatation, de telle façon que la longueur d’une règle quelconque soit proportionnelle à sa température absolue.
Je supposerai enfin qu’un objet transporté d’un point à un autre, dont la température est différente, se met immédiate- ment en équilibre calorifique avec son nouveau milieu.
Rien dans ces hypothèses n’est contradictoire ou inimaginable.
Un objet mobile deviendra alors de plus en plus petit à mesure qu’on se rapprochera de la sphère limite.
Observons d’abord que, si ce monde est limité au point de vue de notre géométrie habituelle, il paraîtra infini à ses habitants.
Quand ceux-ci, en effet, veulent se rapprocher de la sphère limite, ils se refroidissent et deviennent de plus en plus petits. Les pas qu’ils font sont donc aussi de plus en plus petits, de sorte qu’ils ne peuvent jamais atteindre la sphère limite.

Henri POINCARÉ, La Science et l’hypothèse, éditions Ebooks libres et gratuits 2011, (édition originale : 1902)
Publié dans Géométrie non euclidienne | Marqué avec , , , | Laisser un commentaire

Représentation géométrique de l’absolument Autre comme aboutissement inatteignable

Petit extrait de mon mémoire sur L’autre chez Emmanuel Lévinas, où je propose très très rapidement une conception géométrique hyperbolique de la relation à l’autre, et en particulier à l’absolument Autre.

Si l’autre est l’aboutissement du chemin, alors cela signifie que le chemin se termine lorsque l’on arrive à l’autre. Pourtant, comme nous l’avons déjà constaté, pour que l’autre reste autre il ne peut être intégré au moi. L’autre, ainsi, reste toujours absolument autre. Il est comme un horizon qui ne cesse de s’éloigner à mesure que l’on chemine vers lui. Continuer la lecture

Publié dans Géométrie non euclidienne | Laisser un commentaire

Simulation d’un système de deux points sur un disque de Poincaré

Voici une simulation sur Scratch d’un système de deux points dans un disque de Poincaré. Il est particulièrement intéressant de constater que, lorsque ce système se déplace en ligne droite, alors la trajectoire censée être rectiligne est… Une portion de cercle ! Continuer la lecture

Publié dans Géométrie non euclidienne | Laisser un commentaire

Et si l’espace des nombres était aussi hyperbolique ?

    L’infini mathématique est parfois l’idée que l’ « on peut toujours trouver un nombre plus grand ». Ce qui pose problème est précisément l’emploi du verbe « pouvoir » en mathématiques ; il est en effet étrange de dire que l’on peut ou que l’on ne peut pas faire quelque chose en mathématiques : soit c’est vrai, soit c’est faux, mais ce n’est jamais « possible », ou alors c’est une hypothèse ou une conjecture. Or là, il s’agit d’une définition, ce qui pose problème. Continuer la lecture

Publié dans Géométrie non euclidienne | Laisser un commentaire

Ebauche de monde hyperbolique avec Unity

Dans l’article sur le jeu « A Slower Speed of Light », j’écrivais que ce jeu est programmé avec le moteur Unity. Or l’équipe du MIT qui a programmé ce jeu met à disposition du grand public l’ensemble de leur projet, qui est donc utilisable avec Unity.

Pour me faire la main sur Unity, j’ai programmé une ébauche d’espace hyperbolique, du même genre que celui réalisé avec Alice et Scratch. Mais l’idée, à terme, est d’utiliser le travail réalisé par l’équipe de « A Slower Speed of Light » pour créer un environnement hyperbolique. On trouve ce travail sur internet sous le nom de « OpenRelativity » (http://openrelativity.net). Le moteur Unity est téléchargeable gratuitement à l’adresse https://unity3d.com.

Mon travail est téléchargeable sur GitHub à l’adresse https://github.com/julienbusset/HyperbolicWorld-on-Unity.

Vous pouvez tester une première version compilée (Mac, Linux, Windows et Web player) téléchargeable sur mon Google Drive.

Projet Hyperbolic World sur Unity

Projet Hyperbolic World sur Unity

Publié dans Géométrie non euclidienne | Laisser un commentaire

Géométrie existentielle ?

Nous avons l’habitude de dire que l’espace dans lequel nous vivons est euclidien : en particulier, deux droites à angle droit d’une même droite ne se coupent jamais (ce qui correspond au 5ème postulat d’Euclide). Cela semble totalement anodin et évident. D’ailleurs, la plupart de nos travaux dans le plan et dans l’espace respectent cette condition ; le dessin d’architecture et le dessin industriel sont tous deux réalisés sur un plan qui respecte cette condition ; tous les cours de géométrie de l’enseignement général en France respectent cette condition ; le dessin artistique en perspective, si répandu, respecte cette condition ; les mathématiques de l’analyse et des statistiques utilisent habituellement des graphiques (courbe représentative d’une fonction, diagrammes) qui respectent cette condition. Pourtant, dans l’expérience commune de la vie, nous ne rencontrons jamais deux droites dites parallèles qui ne se coupent jamais, ne serait-ce que parce que nous ne pouvons pas le vérifier.

Nous pouvons ainsi émettre l’hypothèse que l’espace que nous vivons n’est pas euclidien, contrairement à celui que nous nous représentons, et nous poser la question de la géométrie de cet(ces) espace(s). Continuer la lecture

Publié dans Géométrie non euclidienne | Laisser un commentaire

A slower speed of light

Le MIT a adapté un environnement de développement de jeu open-source, OpenRelativity, pour développer un jeu, A Slower Speed of Light, dont l’environnement présente une géométrie non-euclidienne. Le principe est de permettre au joueur d’évoluer dans un environnement relativiste et d’en constater les effets à notre échelle ; pour cela, l’équipe chargée du projet a astucieusement recours à une astuce : réduire la vitesse de la lumière. Le stade de développement actuel du jeu, encore en version beta mais gratuit, permet déjà d’observer des altérations géométriques et lumineuses.

A Slower Speed of Light Official Trailer — MIT Game Lab

Lire cette vidéo sur YouTube.

 

Je présente ce projet ici, car ma démarche rejoint celle des auteurs de ce jeu. J’irais même jusqu’à dire que, dans le principe, il n’a qu’une différence : là où ils diminuent la vitesse de la lumière, j’envisage plutôt d’être « gros » relativement à l’univers, ce qui implique une vitesse relative importante, donc proche de celle de la lumière. Évidemment, dans la mise en œuvre, nos projets ne sont pas du tout comparables ! Mais j’ai espoir, du coup, de voir naître le projet d’une autre main !

Le jeu est téléchargeable gratuitement à l’adresse http://gamelab.mit.edu/games/a-slower-speed-of-light/

Publié dans Géométrie non euclidienne | Laisser un commentaire

Calcul différentiel de la déviation d’un mobile sur un disque de Poincaré.

Suite au dernier projet Scratch permettant de dévier un mobile sur un disque de Poincaré par l’influence de deux mobiles situés sur les flans du premier, j’ai réitéré l’expérience avec un mobile de taille différente, et donc un écartement différent des mobiles situés aux extrémités (http://scratch.mit.edu/projects/49909842/). Comme on pouvait le supposer intuitivement (ou comme certains le savent sans doute déjà!!), cet écartement n’a aucune influence sur la déviation. J’ai donc cherché à formaliser cette déviation par un calcul différentiel.
Comme le but de ce calcul était de pouvoir utiliser le résultat dans Scratch (et que ça fait longtemps que je n’ai pas fait de math sérieusement!), les conventions habituelles seront peut-être parfois perturbées : je vous prie de m’en pardonner.

J’obtiens et j’utilise cette formule : \displaystyle\frac{\mathrm{d}\theta_V}{\mathrm{d}t} = 2|\vec V|_{\mathit{eucl}}|z|\sin{(\theta - \theta_V)}

z est l’affixe de la position du solide, \displaystyle\theta sont argument et \theta_V l’angle du vecteur vitesse \displaystyle\vec V du solide.
La mise en œuvre de cette équation différentielle est visualisable sur le projet Scratch suivant, sans avoir besoin de la résoudre : http://scratch.mit.edu/projects/49907478/
Je devrais pouvoir la mettre en œuvre dans Alice3 et Garry’s Mod sans avoir besoin de la résoudre. Cependant, j’essaierai tout de même de la résoudre (sauf si un étudiant en mathématiques souhaite le faire pour moi à titre d’entraînement ^^).

Voici donc une démonstration de la formule utilisée (merci de me prévenir si vous voyez une erreur!!!) : Continuer la lecture

Publié dans Géométrie non euclidienne | Marqué avec , , , , , , | Laisser un commentaire

Disque de Poincaré dans Garry’s Mod

Modification du mode de jeu « Hyperbolic World » de Garry’s Mod : il prend à présent en charge le changement de taille, de vitesse et d’autres détails.

Le gamemode est téléchargeable à l’adresse suivante et doit s’installer dans le dossier « gamemodes » de Garry’s Mod :

https://github.com/julienbusset/hyperbolicworld/tree/v2

Petite précision oubliée dans l’article précédent : la géométrie en question est celle d’un disque de Poincaré.

Il reste encore énormément de choses à faire pour que le mode soit vraiment jouable !! Si des volontaires souhaitent contribuer à son élaboration, ils sont les bienvenus…

Publié dans Géométrie non euclidienne | Marqué avec , , , , , , | Laisser un commentaire

Gamemode à géométrie hyperbolique sur Garry’s Mod

Premier essai sur Garry’s Mod ! Vous trouverez sur mon dépôt GitHub le projet de mode pour Garry’s Mod :

https://github.com/julienbusset/hyperbolicworld/

Il nécessite d’avoir le jeu Garry’s Mod sur son ordinateur.

Pour l’instant, le mode fonctionne avec la map flatgrass de la sandbox, et il ne simule que la réduction de vitesse en fonction de la distance au centre.

Publié dans Géométrie non euclidienne | Marqué avec , , , , , , | Laisser un commentaire