2010-12-30 3 views
1

pourriez-vous s'il vous plaît me fournir quelques informations (ou suggérer un article) sur bon algorithme de détection de collision pour les figures 2D non convexes?Bon algorithme pour la détermination de collision de figures 2D non convexes

Merci!

+0

Clarification: Avez-vous besoin d'une réponse simple * Est-ce qu'ils se croisent? * Ou avez-vous besoin de l'intersection? –

+0

@Alin Purcaru: J'ai besoin d'une simple réponse "est-ce qu'ils se croisent". –

+0

J'ai ajouté une réponse pour les polygones simples. Cela * peut * vous aider. –

Répondre

3
Essayez ceci:
http://www.cs.man.ac.uk/~toby/alan/software/
Notez qu'il est pas libre pour un usage commercial.


Pour plus de détails vous pouvez continuer à cette même question:

A simple algorithm for polygon intersection


Pour déterminer si deux simple polygones se croisent:

Si deux polygones simples ont un intersection non-vide, l'un des événements suivants se produira:

A) L'un d'eux a un coin à l'intérieur de l'autre.
B) L'un d'entre eux a un bord entier à l'intérieur de l'autre (les coins de ce bord peuvent ne pas être nécessairement à l'intérieur). Cela signifie que le milieu de ce bord sera à l'intérieur.
C) Les polygones sont identiques.
D) Il y a deux arêtes qui se croisent sous un angle. Le point d'intersection n'étant pas un angle avec l'un des polygones. Ce que vous devez faire est de vérifier si les polygones sont identiques (avoir les mêmes coins), ou si l'un des coins ou l'un des milieux se trouve à l'intérieur de l'autre polygone ou s'il y a deux bords qui se croisent ailleurs que dans un coin.

Determining if a point lies on the interior of a polygon.

+0

Merci, mais j'ai besoin d'un algorithme, pas d'une bibliothèque. –

+1

Je ne pense pas que vous avez couvert tous les cas. Considérez: http://i.imgur.com/NbCyp.png Il pourrait être correct si B) est changé en si deux bords se croisent. – job

+0

@job Avec B) J'avais autre chose en tête et je pense que ça devrait être gardé. Peut-être ajouter un * D) Il y a deux arêtes qui se croisent à un angle *. –