2009-03-07 6 views
2

je lis des rectangles d'intersection sur:séparation test de l'axe, détecter si un rectangle pivotée chevauchent un autre rectangle plat

Algorithm to detect intersection of two rectangles?

Mais j'ai du mal à le mettre en œuvre. Si R1 (A, B, C, D) est mon rectangle tourné et R2 (A ', B', C ', D') l'autre rectangle sans rotation.

La formule extraite à partir du lien ci-dessus est la suivante:

edge = v(n) - v(n-1) 

vous pouvez obtenir une perpendiculaire à cette en le faisant tourner de 90 °. En 2D c'est facile:

rotated.x = -unrotated.y 
    rotated.y = unrotated.x 

    // rotated: your rotated edge 
    // v(n-1) any point from the edge. 
    // testpoint: the point you want to find out which side it's on. 

    side = sign (rotated.x * (testpoint.x - v(n-1).x) + 
       rotated.y * (testpoint.y - v(n-1).y); 

Mes bords seront mis en rotation de R1 avec

AB (xB-xA, yB-yA) x est donc pivotée xB-xA? BC (xC-xB, YC-y1) CD ... AD ...

Testpoint sera A 'B', C 'D' de R2 je dois donc vérifier le signe de le résultat de tous les points de R2 contre les 4 bords de R1. Cest 16 comparaisons si intersection. Comment puis-je savoir si j'ai trouvé un bord de séparation?

Merci

Répondre

2

Si pour tout bord donné, les signes de l'un des produits de point test contre ce bord ne correspondent pas, alors vous avez une intersection. Le signe du produit scalaire sera le même pour tous les points d'un côté de la ligne.

Questions connexes