Aller au contenu principal
sports_esports Lab Canvas 2D Intégration de Verlet Contraintes Zéro dépendance

Tissu Verlet — intégration de Verlet et contraintes de distance en Canvas 2D

Une simulation de tissu en Canvas 2D : un maillage de points animé par l'intégration de Verlet (la vitesse est implicite dans l'écart entre position courante et précédente) et des contraintes de distance résolues par plusieurs passes de relaxation par image. La rangée du haut est épinglée ; on attrape et déforme le tissu à la souris. Zéro dépendance.

Glissez un point à la souris pour déformer le tissu Clic droit : couper une contrainte au survol R : réinitialiser · Espace : mettre en pause

Une simulation physique tenue par la position, pas par la vitesse

Ce tissu n'est qu'un maillage de points reliés par des segments. Ce qui le fait vivre, c'est l'intégration de Verlet : je ne stocke jamais la vitesse d'un point, seulement sa position courante et sa position précédente. La vitesse est implicite — c'est la différence entre les deux. À chaque pas, j'avance le point de ce déplacement, puis j'ajoute la gravité. Une méthode « position-based » que je préfère à un couple position / vitesse classique parce qu'elle est nettement plus stable numériquement.

Des contraintes de distance résolues par relaxation

Chaque segment impose une contrainte simple : deux points voisins doivent rester à leur longueur de repos. Après avoir déplacé tous les points, je parcours les contraintes et je corrige chaque paire — si le segment s'est étiré, je rapproche les deux points ; s'il s'est comprimé, je les écarte, à parts égales quand aucun n'est fixe. Corriger une contrainte en dérègle une autre : c'est pourquoi je répète l'opération plusieurs fois par image. Chaque passe supplémentaire rigidifie le tissu et rapproche l'ensemble d'une solution où toutes les contraintes sont à peu près satisfaites en même temps.

Épingler les points fixes, un cas particulier gratuit

La rangée du haut est épinglée : ces points ne bougent jamais, ni sous la gravité ni sous la relaxation. Je les traite comme immobiles, et la résolution d'une contrainte reportée entièrement sur le point libre voisin. Le point que vous attrapez à la souris devient temporairement fixe lui aussi — c'est le même mécanisme. Aucun code spécial : un point épinglé, un point tenu et un point au repos suivent exactement la même logique, avec un simple poids à zéro.

Un pas de temps fixe pour une stabilité prévisible

La physique tourne sur un pas de temps fixe, découplé du rafraîchissement de l'écran : j'accumule le temps réel écoulé et je consomme des pas constants, avec un garde-fou sur leur nombre pour éviter la « spirale de la mort » quand l'onglet a pris du retard. Résultat : le tissu se comporte à l'identique sur un écran 60, 120 ou 144 Hz, se met en pause dès que l'onglet passe en arrière-plan, et ne « explose » pas au premier à-coup. Vous pouvez glisser un point, couper des contraintes au clic droit, réinitialiser d'une touche.

Pourquoi cette rigueur compte pour vos projets

Une simulation de tissu n'a rien d'anecdotique : c'est un système où de petites imprécisions s'accumulent vite et finissent par tout faire diverger. Le choix d'une méthode stable, d'un pas de temps maîtrisé et de garde-fous explicites est exactement la discipline que j'applique à un back-office critique ou à un moteur de calcul métier. Un code qui reste prévisible et robuste sous la charge, plutôt que spectaculaire jusqu'au jour où il déraille — c'est ce que je livre, et ce dont vous gardez la pleine maîtrise.

Photo d'Emmanuel BALLERY, fondateur de x10

À propos de l'auteur

Emmanuel BALLERY est le fondateur de x10 solutions. Ces petits jeux sont surtout un plaisir de développeur, codés le week-end — pas une vitrine de mes missions, qui sont bien plus exigeantes. J'y soigne quand même la performance et la lisibilité, par habitude.

Voir plus arrow_forward
rocket_launch

Un vrai projet en tête ?

Ce petit jeu m'amuse, mais il ne dit pas grand-chose de mon métier : mes missions sont bien plus complexes. Si vous avez une application à concevoir ou à fiabiliser, c'est là que je suis vraiment utile.

Discuter de mon projet arrow_forward