|
|
||
| Tutoriaux : Projection d'un point sur une droite | ||
|
1. Introduction |
||
|
||
| 2. Dans la bibliothèque et sur la scène | ||
| Créez dans votre bibliothèque un clip quelconque, par exemple, un cercle de 10 pixels de diamètre. Placez n'importe où sur la scène principale 6 occurrences de ce clip. En utilisant le panneau "propriétés", nommez ces occurrences respectivement "ptO", "ptA", "ptB", "ptM", "ptI" et "ptJ". Veillez à ce que les clips nommés ptO, ptA et ptB ne soient pas alignés... | ||
| 3. Le code et l'animation obtenue | ||
| Dans le panneau action de l'image n°1 de la scène principale, collez le code suivant qui permettra de placer les occurrences ptI et ptJ. | ||
|
||
| 4. Le code avec ses commentaires | ||
| Dans Flash l'origine du repère est le point qui se trouve en haut à gauche de la scène. Avec les lignes de code ci-dessous nous calculons les coordonnées des points M, A et B dans le repère (O, i, j). Attention : originalité de Flash j est orienté vers le bas (les points dont l'ordonnée est négative se trouvent au dessus de la scène et sont donc invisibles dans l'animation publiée !). | ||
| var xM = ptM._x-ptO._x; var yM = ptM._y-ptO._y; var xA = ptA._x-ptO._x; var yA = ptA._y-ptO._y; var xB = ptB._x-ptO._x; var yB = ptB._y-ptO._y; |
||
| Pour parvenir à placer I et J, de nombreuses méthodes mathématiques sont possibles. J'aime bien voir les choses sous la forme de systèmes d'équations ou de matrices. Ici nous calculons le déterminant du système... Si detS est égal à zéro, cela signifie que les points O, A et B sont alignés. Dans ce cas les points I et J ne sont pas définis ! | ||
| var detS = xA*yB-xB*yA; | ||
| Ces deux lignes permettent de calculer les coordonnées du point M dans le repère (O, OA, OB). | ||
| var newxM = (yB*xM-xB*yM)/detS; var newyM = (-yA*xM+xA*yM)/detS; |
||
| On obtient les coordonnées du point I projeté de M sur la droite (OA) parallèlement à (OB). | ||
| ptI._x = ptO._x+xA*newxM; ptI._y = ptO._y+yA*newxM; |
||
| On obtient les coordonnées du point J projeté de M sur (OB) parallèlement à (OA). | ||
| ptJ._x = ptO._x+xB*newyM; ptJ._y = ptO._y+yB*newyM; |
||
| 5. Quelques remarques | ||
| Si vous avez besoin de ce bout de code, je vous conseille d'écrire une fonction... Méfiance, il faudra faire attention au cas où detS est égal à zéro ! Pour les initiés, ce que nous venons de faire est quasiment un changement de bases, on aurait pu utiliser les matrices de changement de bases et avoir recours à des fonctions matricielles mais ma philosophie est de faire simple quand cela est possible et d'aller à l'essentiel dans mes tutoriaux. | ||
|
|