Physical engine :
As some of you may have notice, recently, I have talk a lot about physical engine [1]. And so after reading the Advanced Character Physics [2], I start to write some code and very quickly, I get something very interesting. You can have a look following this link.

This basic engine was interesting but quickly, I realized that this approach was not good enought (particularly in stacked object stability). So I began to implement a true collision detector.
Basicaly, this detection consist to study the minkowski sum/difference [3] of two polygon. To make myself clear, I'll show you a picture showing the result of this operation :

The difference give exactly the same result as the sum but give an interesting side properties, if the minkowski difference contains the origin, then, we can determine that the two polygons overlapse !
Actualy, Whysics is capable of computing this difference and can show you this difference [4]
Here's the result :

The rounded rectangle in the upper bound represent the minkowski difference of the circle and rectangle in the lower bound of the picture. You may also notice that they actualy overlapse. The little black cross represent the origin of the world (aka (x=0, y=0)) and the green vector represent the minimum distance of the rectangle and the circle. This green vector in fact is the closest point of the minkowski difference with the origin.
Now, the last thing we need to do to avoid overlaping of this two polygon, is to push them each other in the direction of this green vector.
Well good, now everything is finished you may say ... But this kind of computation are very time consumming and we need to compute this kind of thing a lot more faster (particularly if we have hundreds stacked elements). So after experimenting various algorithm (and getting totaly mad), I start writing the GJK algorithm.
A good description can be grab at http://realtimecollisiondetection.net/pubs/SIGGRAPH04_Ericson_the_GJK_algorithm.ppt. For a more complet description, you can check this paper : http://www.win.tue.nl/~gino/solid/jgt98convex.pdf.
Actualy my version of GJK is almost finish but need some more polishing. I'll be back when this thing get finished !
Moteur Physique :
Comme vous l'avez sans doute remarqué, j'ai commencé à parler il y a quelques temps de l'utilisation d'un moteur physique dans Wormux [5]. Suite à la lecture de l'article Advanced Character Physics [6], j'ai commencé à écrire quelque chose et très rapidement, j'ai obtenu quelque chose d'intéressant. Pour les plus curieux, vous pouvez jeter un oeil au lien suivant.

Ce moteur était intéressant mais rapidement, j'ai réalisé qu'il y avait des trucs qui n'allait pas (particulièrement pour les objets empilés). J'ai donc commencé à écrire un vrai détecteur de collision.
En gros, pour réaliser cette détection, on s'appuie sur des différences/sommes de minkowski [7] de polygones. Pour rendre tout ça bien clair, je me suis permit de vous montrer le résultat de cette opération :

La différence donne exactement le même résultat que la somme mais avec des caractéristiques très intéressantes comme par exemple le fait que si la somme de minkowski contient le point d'origine on sait alors que ces 2 polygones se chevauchent !
Whysics et donc capable de faire cette différence et vous l'afficher à l'écran [8]
Voici le résultat :

Le rectangle au bord arrondi dans le haut de l'image représente la différence de minkowski du cercle et du rectangle qui se trouve au bas de l'image. Comme vous pouvez le constater, ces 2 figures se chevauchent. La petite croix noir représente l'origine du monde (ie (x=0, y=0)) et le vecteur vert, représente la distance entre le rectangle et le cercle. Ce vecteur vert se trouve être le point le plus proche de la différence de Minkowski avec l'origine.
La dernière chose qu'il nous reste à faire pour empêcher que 2 polygones se chevauchent est donc de les repousser chacun dans le sens de ce vecteur vert.
Bon très bien mais maintenant tout est terminé ... Malheureusement, ce genre de petit calcul coûte très cher et on a besoin d'avoir quelque chose de plus rapide (surtout si on doit le faire pour 100 objets empilés). Donc, après m'être pris la tête avec plusieurs algo (et devenir complètement dingue), j'ai commencé à écrire l'algorithme GJK.
Vous pouvez récupérer une bonne description à l'adresse http://realtimecollisiondetection.net/pubs/SIGGRAPH04_Ericson_the_GJK_algorithm.ppt. Pour quelque chose de plus complet, vous pouvez également aller lire ce papier :http://www.win.tue.nl/~gino/solid/jgt98convex.pdf.
Disons que l'algo est presque terminé mais que j'ai encore besoin de le corriger. Je reviendrais quand j'en aurais fini avec !