Il existe plusieurs approches différentes de ce que vous voulez faire. Vous avez mentionné la détection de collision: voulez-vous déterminer si un point croise la forme, ou voulez-vous déterminer si deux polygones se croisent?
Si vous voulez un point, ce que vous cherchez s'appelle un "point dans un test polygonal". Il existe un certain nombre d'approches différentes, mais l'une des approches les plus rapides et les plus simples est un test de rayon. Vous créez un rayon à partir de votre point et comptez le nombre de fois qu'il traverse les bords. Si le nombre est pair, le point est dehors. Si c'est bizarre, le point est à l'intérieur.
Vous pouvez trouver un bon article sur ce ici: http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
La mise en œuvre du code de l'article ressemble à ceci:
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; j = i++) {
if (((verty[i]>testy) != (verty[j]>testy)) &&
(testx < (vertx[j]-vertx[i]) * (testy-verty[i])/(verty[j]-verty[i]) + vertx[i]))
c = !c;
}
return c;
}
Déterminer si deux polygones se croisent est plus complexe, mais pas tout à fait dissemblables. Un grand nombre de jeux vérifient simplement les coins des polygones avec point-in-poly car c'est facile et pas cher, mais il est également possible de vérifier l'intersection complète. Une façon de l'approcher est de traiter chaque arête comme un plan de division/demi-espace. L'intersection des demi-espaces détermine si les deux polygones se croisent.
Essayez de chercher "Théorème de l'axe de séparation".