2012-11-28 4 views
3

Tout d'abord, je veux décrire mon problème: j'ai deux polygones 2D (deux ensembles de coordonnées de points 2D, polygonA et polygonB). Je ne sais pas si ces deux polygones entrent en collision ou quelle est la distance entre eux. De plus, l'un des polygones, disons polygoneA, est fixe, par ex. il n'est pas permis de le traduire ou de le faire pivoter. Maintenant, je veux calculer une position de polygonB telle que 1. polygonA et polygonB n'entrent pas en collision 2. la distance quadratique sommée entre polygonA et polygonB est minime En d'autres termes: je cherche une position où polygonB "se trouve" parfaitement sur polygonA. Y a-t-il quelqu'un qui connaît un tel algorithme? Des idées? Merci beaucoup pour votre aide! Piamontage polygones 2d

+0

Voulez-vous tester si polyB est complètement polyA, se chevauche polyB polyA, ou quoi? Pas vraiment sûr de ce que votre objectif est. – AJMansfield

+1

Comment calculez-vous la distance entre les polygones? Les polygones sont-ils autorisés à être concaves ou doivent-ils être convexes? Si vous avez juste besoin d'être touché, il y a beaucoup de positions qui le feraient et vous en avez juste besoin? – Chris

+0

Oh! vous demandez comment ajuster la position de deux polygones afin qu'ils ne se chevauchent plus. De plus, vous ne voulez probablement pas juste minimiser la somme des carrés des distances, vous devez en fait peser ce poids afin que le petit polygone entrant en collision avec un grand polygone soit déplacé plus loin que le grand. De toute façon, des balises plus descriptives seraient d'une grande aide pour ceux qui essaient de vous aider à résoudre le problème. Et enfin, plus de détails sur le système cible nous aideraient également à vous aider. – AJMansfield

Répondre

0

Si vous essayez de déterminer si polyB se trouve entièrement dans polyA, il vous suffit de vous assurer que tous les points de limite de polyB se trouvent dans polyA. Selon ce que vous voulez, la règle paire-impaire ou la règle non-nulle d'enroulement est ce que vous devriez employer pour examiner cela. Si vous essayez seulement de tester un chevauchement partiel, tout ce dont vous avez besoin est que l'une des verticies se trouve dans l'autre polygone, dans ce cas, Even-Odd ou Non-Zero est toujours le chemin à parcourir.

+0

Non, je ne veux pas tester si polyB se trouve complètement dans polyA! Je veux calculer la translation et la rotation de polyB, de telle sorte que polyA et polyB n'entrent pas en collision et que la distance au carré sommée entre les deux polygones soit minimale. Le cas où polyB se trouve complètement dans polyA devrait également être exclu par l'algorithme! J'ai besoin d'une solution où polyB se trouve complètement à l'extérieur de polyA! – user1859705