De nombreux codeurs ayant besoin d'agir sur un environnement visuel ont tous à leur actif une classe Vector. De nombreuses fonctionnalité géométriques bien utiles peuvent être implémentées dans cette classe.

Mais je suis sûr que chaque codeur a implémenté quelques astuces et/ou fonctionnalités auxquelles personne n'a pensé. Ce que je propose ici, c'est que ceux qui le veulent bien nous fassent partager leur expérience à ce propos.

Voici l'interface (pas interface AS hein, juste la liste des signatures de mes méthodes) de la classe que j'utilise personnellement. Si vous avez des idées pour l'enrichir, je suis sûr que ca fera plaisir à beaucoup de monde... ;)
Vector {
        // Constructeur
        // Peut prendre deux nombres
        // ou deux points (vecteurs) qui forment un vecteur
        public function Vector(x, y);
        // Accesseurs
        public function get x():Number;
        public function set x(x:Number);
        public function get y():Number;
        public function set y(y:Number);
        // Accesseurs "virtuels"
        // Coordonnées polaires
        public function get size():Number;
        public function set size(s:Number);
        public function get angle():Number;
        public function set angle(a:Number);
        // Déplacement
        // Peut prendre deux nombres (coordonnées)
        // Ou un vecteur (utilise les coordonnées du vecteur)
        public function moveTo(x, y:Number);
        // Opérations
        public function sum(v:Vector):Void;
        public function sub(v:Vector):Void;
        public function scalar(v:Vector):Number;
        // Transformations
        public function translate(v:Vector):Void;
        public function scale(r:Number):Void;
        public function rotate(a:Number):Void;
        // Utilitaires
        // Vecteur normal (taille 1)
        public function getNormal():Vector;
        // Distance entre deux points
        public function getDistanceTo(v:Vector):Number;
        // Point d'arrivée du vecteur partant de v
        public function getEnd(v:Vector):Vector;
        // Clone
        public function clone():Vector;
        // Copie d'un autre vecteur
        public function copyFrom(v:Vector):Void;
        // Debug
        public function toString():String;
}

Ce type de classe utilise par contre une ambiguité bien pratique entre la notion de point et la notion de vecteur. En effet, un point n'est rien d'autre que l'extrémité d'un vecteur partant de l'origine... :)

Je pense créer une classe SimpleVector, qui utiliserait des angles entiers, en degrés, histoire d'optimiser les calculs... Voir un système de cache pour les coordonnées polaires...

Je pense aussi à créer une classe EventVector, qui permettrait de diffuser des évenements pour toute modification effectuée dessus...