2009-05-27 7 views
2

Je n'arrive pas à comprendre comment coder ceci et j'apprécierais toute assistance.Guidage de l'effet Snap to Edge

alt text http://agutie.homestead.com/FiLEs/triangle_square/triangle_square_03.gif

L'image ci-dessus est quelque chose que je googlé, mais représente rapidement un exemple décent. Imaginez que les carrés et le triangle puissent être déplacés par l'utilisateur. Si l'utilisateur fait glisser et place le carré BGFC "près" du triangle ABC, je voudrais automatiquement aligner/déplacer le carré pour l'aligner avec le bord des triangles. Les sommets ne doivent pas correspondre (et de préférence ne le seront pas, donc l'accrochage n'est pas si restrictif), je veux juste déplacer le carré de sorte que son bord le plus proche s'aligne avec le bord le plus proche des triangles.

Étant donné l'accès à toutes les coordonnées/sommets/angles, existe-t-il une méthode raisonnablement simple pour réaliser cet effet d'accrochage à l'autre?

Si c'est un exemple trop complexe, que diriez-vous simplement de deux rectangles avec tous les angles de 90 degrés dans la même situation? Faites glisser un rectangle près d'un autre et accrochez automatiquement le rectangle au bord de l'autre. Je suppose qu'il y a une façon mathématique de s'en sortir, ce que je serais heureux de rechercher si je poussais dans la bonne direction. Merci de votre aide!

Répondre

3

alt text http://img529.imageshack.us/img529/7607/trianglesquare01.gif

La première image montre un triangle et un carré. Le côté du triangle suit une ligne l (1) et le côté du carré suit une autre ligne l (2).

Nous voulons maintenant déterminer la distance entre les lignes. Appelons ça d. Cette valeur déterminera si le carré doit être déplacé ou non. Comme vous l'avez mentionné dans votre question, nous connaissons toutes les coordonnées et tous les angles, ce qui signifie que les équations des lignes sont également connues.

En supposant que nous savons d. Nous voulons maintenant calculer le déplacement (dx, dy). L'image suivante montre une partie agrandie de la première image.

alt text http://img529.imageshack.us/img529/161/trianglesquare02v.gif

Nous savons que l'angle a dans le triangle nous avons donc:

dx = d * sin a 
dy = d * cos a 

Tout ce que vous devez savoir maintenant, est de savoir comment calculer la distance entre deux lignes d parallell. Je laisse cela comme un exercice pour vous. Voici un lien pour vous aider à démarrer:

The Perpendicular Distance between two Parallel Lines

Et voilà!

Modifier

Vous devez excuser mon l337 photoshop skillz. Mais j'espère qu'ils illustrent assez.