nicoptere.net
index || Page suivante

Avant toute chose il est important de précisier que nous parlons ici d'un modèle d'objet vecteur générique. C'est à dire qu'il n'est pas un objet au sens de la POO, à savoir l'instance d'une classe, mais plutôt un conteneur de variables. Cette approche n'est pas la meilleure (loin de là!) mais elle me semble plus imagée. rendez vous à la page classe vecteur si vous voulez de la POO (et même là c'est un grand mot mais disons que c'est organisé en classes avec des instances et tout).

Aperçu des propriétés de nos objets point et vecteur:

propriétés du Point

Notons qu'il existe une classe Point depuis la version 8 de Flash vous trouvez ci dessous une liste de ses propriétés et de ses méthodes :

flash.geom.Point()

Nous voir nous servirons du Point Flash dans notre classe Vecteurs, pour l'instannt, voyons comment nous allons organiser notre object générique Vecteur. Pour l'instant, exception faite des fonctions: clone(), offset() et toString(), nous allons apprendre comment remplacer toutes les fonctions ci dessus. Voyons maintenant le vecteur :

propriétés du vecteur

Propriétés communes :

P0
est le point de départ , il possède donc deux propriétés x et y.

P1

point d'arrivée du vecteur, est optionnel il permet notamment de créer un vecteur entre les points de départs deux vecteurs existants. Il est aisé de déduire vx et vy à partir de p0 et p1. A l'usage, on voit qu'il est également moins facile de manipuler 2 paires de coordonnées (p0.x / p0.y + p1.x / p1.y ) que les composantes vx et vy.

vx
/ vy
ce couple de valeurs est central pour le fonctionnement des vecteurs. Il indique la valeur du déplacement sur l'axe des x et des y. Il est aisé de déduire la position de p1 à partir de vx et vy.

longueur

la longueur du vecteur entre son point de départ et d'arrivée.

angle
l'angle formé entre l'axe des x (0) et l'axe qui lie les points de départ et d'arrivée, très utile dans les systèmes de coordonnée polaires où l'on calcule les valeurs de vx / vy avec les sinus / cosinus de l'angle et une longueur de vecteur. Il peut être renvoyé en degrés ou en radians selon l'usage qu'on en a ; Flash calcule les angles en radians. Pour obtenir la valeur en degrés, il suffit de faire l'opération suivante :
var degres:Number = radians * 180 / Math.PI;
où radians est la valeur de l'angle en radians.

unité de vecteur
L'unité de vecteur se compose de deux variables dx et dy obtenues en divisants vx et vy par la longueur de vecteur. Elle sert dans de nombreux cas notamment pour calculer les intersections.

normales du vecteur
Ce sont elles mêmes deux vecteurs ayant le même point de départ et la même longueur mais sur un axe perpendiculaire et dans deux directions opposées. Sur un bateau, la normale gauche est à babord et la normale droite à tribord, vx et vy désignent la direction du vecteur. Etant des vecteurs, elles ont chacune deux propriétés vx et vy.

propriétés supplémentaires :

Ces propriétés viennent s'ajouter aux propriétés par défaut selon les besoins. Les plus fréquentes sont listées ci dessus mais on peut en avoir un nombre à peu près illimité. Leur type varie selon l'usage qu'on en fera, les plus fréquents sont Boolean; Number, Object, Array. Object étant le plus souvent un autre vecteur. Dans un modèle physique par exemple, un vecteur pourra avoir une masse (type:Number), il subira la gravité (type:Object, un autre vecteur). Un personnage non joueur pourra avoir des waypoints à atteindre (donc un Array). Toutes ces variables peuvent être stockées à l'extérieur ou dans notre objet ; la gravité est une force qui influe sur notre vecteur mais n'est pas notre vecteur, elle serait mieux en dehors. La masse parcontre est une caractéristique particulière de notre objet, nous créerons une variable .masse, idem pour la friction, l'inertie etc. nous verrons plus en détail au cas par cas.

 

Pour manipuler plusieurs vecteurs génériques, nous mettons en place un série de fonctions utilitaires. Plus tard nous les inorporerons dans le paquetage de classe Vecteurs.*

fonction génériques

Getters / setters pour les propriétés:

Pour commencer, il nous faut une batterie de fonctions pour initialiser puis mettre à jour nos propriétés de vecteur. Il nous faut également des fonction pour récupérer les valeurs de ces propriétés.

calculs de base :

addition( v1, v2 ):Object
permet d'additionner deux vecteurs, fonction extrèmement pratique et très fréquemment utilisée. Elle renvoie l'objet v1 modifié.

dotProduct( v1, v2 ):Number
cette fonction indique la direction du vecteur, elle renvoie un nombre positif ou négatif. s'il est positif, les deux vecteurs vont dans la même direction, s'il est négatif, ils vont dans une direction opposée.

projection( v1, v2 ):Object
cette fonction essentielle calcule la projection d'un vecteur sur un autre. Elle s'appuye sur la fonctions dotProduct.

perP( v1, v2 ):Object
cette fonction marche comme le dotProduct mais au lieu d'utiliser le vecteur, on se sert des normales du vecteur.

intersection( v1, v2 ):Object
cette fonction aussi essentielle que la projection calcule le point d'intersection d'un vecteur sur un autre. Elle s'appuye sur les fonctions perP et dotProduct.

calculs composés :

Ces calculs, croyez le ou non reposent tous sur ces 5 fonctions + les getters / setters, bien sûr. Dans la plupart des cas, il s'agira de combiner les fonctions de base.

nicoptere.net
index || Page suivante