Voila, j'ai terminé:
Cela rend plutôt bien:
Voila une vidéo qui montre ce que cela donne:
Ici, c'est le code source.
Par contre pour compiler, il faut linker avec la SFML(2.1). (J'ai laisser mon cmake dedans)
http://www.mediafire.com/download/mhh8lpj3638cvy5/corde.tar.gzN'hésite pas à me poser des question.
Le principe:
Une corde est fait d'une chaîne de points physique.
Je résoud les contraintes de la corde de cette manière:
Si la distance interpoint est trop grande, j'applique une force élastique.
De plus je corrige une certaine proportion pour replacer le point plus proche du précédent. (Cela fait perdre un peu d'énergie à la corde au passage, c'est pas mal pour avoir quelque chose de stable)
Ensuite pour les collision entre la corde et les formes, j'ai une méthode pour les formes qui me renvoie une collision, celle-ci me renseigne sur la pénétration et la normale à la surface en collision.
Si il y a une collision entre un point et une forme je fait ceci:
- Je met la vitesse normale à 0 ( j'applique une impulsion )
- Je corrige la position d'une certaine proportion.
Bon après, avec ce que je propose, il y a pas mal d'amélioration possible.
Du fait de la gravité, la répartition des points sur la corde est concentré vers le bas (De forme exponentielle). De ce fait, même si on alloue plein de points pour la corde, il y en aura toujours pas beaucoup en haut de la corde.
Et puis, il y a un compromis à faire entre précision/rapidité en mettant plus ou moins de points sur la corde