Des tas de situations demandent de définir un couple de valeurs, que ce soit pour retenir la position d'un objet, stocker des dimensions ou un point sur un graphique. De même, on est souvent amené à effectuer des opérations sur ce type de données. La classe Vecteur2D simplifie la syntaxe lors des calculs avec un vecteur.
Les opérations de base
Vecteur2D s'occupe de mémoriser deux coordonées, représentant un point dans l'espace ou un vecteur (partant de l'origine)
Le constructeur de la classe Vecteur2D définit deux propriétés, x et y, représentant respectivement les coordonnées horizontale et verticale. Les valeurs sont converties dans le type float.
class Vecteur2D: def __init__ (self, x, y): self.x = float(x) self.y = float(y)
La norme d'un vecteur est sa longueur, c'est-à-dire la distance séparant l'origine (0, 0) et le point représenté par le vecteur. On calcule la norme à l'aide du triangle de Pythagore. Son hypothénus est la norme.
# Norme du vecteur (longueur) def norme (self): return math.sqrt( self.x*self.x + self.y*self.y )
Cette méthode retourne le vecteur unité, c'est-à-dire l'orientation du vecteur normalisé sur une échelle de 1.
# Retourne le vecteur unité. Celui-ci est normalisé à 1 et possède la même # direction que le vecteur d'origine. def unite (self): return Vecteur2D( self.x, self.y) n = self.norme() if (n==0): return Vecteur2D( 0, 0 ) else: return Vecteur2D( float(self.x)/float(n), float(self.y)/float(n) )
Inverse le vecteur.
# Inverse les coordonnées du vecteur. def inverser (self): self.x *= -1.0 self.y *= -1.0
On a souvent besoin d'obtenir la copie d'un vecteur. En effet, l'opérateur '=' crée une
référence vers l'objet Vecteur2D. Ainsi position = Vecteur2D(100, 50) crée un nouveau
vecteur puis stocke une référence vers cet objet. 'position' est une référence vers
l'instance de Vecteur2D pas l'objet lui-même !
Ainsi, pour copier la variable position, l'instruction copie = position n'est pas correcte.
Dans ce cas, 'copie' fera aussi référence à la même instance que 'position'.
Cela veut dire que toutes les modifications sur 'position' seront aussi effectives sur
'copie'.
Pour copier correctement une instance de Vecteur2D, il suffit de lire les valeurs de ses propriétés, x et y dans notre cas, et de renvoyer une nouvelle instance de Vecteur2D initialisée à ces valeurs.
# Cloner le vecteur. Retourne un vecteur identique def cloner (self): return Vecteur2D( self.x, self.y)
L'addition d'un vecteur à un autre correspondant à la somme de leurs coordonnées x et y.
# Additionne un vecteur def addition (self, v): self.x += v.x self.y += v.y
Additioner et créer un nouveau vecteurCette méthode est identique à celle présentée ci-dessus à la différence qu'elle renvoit un nouveau vecteur.
# Retourne un vecteur résultant de l'addition de deux vecteurs def additionN (self, v): r = Vecteur2D(v.x+self.x, v.y+self.y) return r
La
# Soustraction du vecteur avec le vecteur V. def soustraction (self, v): self.x -= v.x self.y -= v.y
Pour déterminer la distance entre deux vecteurs, on soustrait la position d'un vecteur à la position de l'autre. On obtient ainsi, sous forme de vecteur, la distance entre les deux vecteurs initiaux. Il ne reste plus qu'a calculer cette distance en utilisant la norme d'un vecteur.
# Retourne la distance entre deux vecteurs (norme de la différence) def distance (self, v) : uu = self.cloner() vv = v.cloner() uu.soustraction(vv) return ( uu.norme() )
# -*- coding: utf-8 -*-
"""
Représentation d'une ligne sur un plan.
La classe Segment décrit une ligne dans un espace à 2 dimensions.
Contact : clic4@clic4.org
"""
__author__ = u"Sébastien L. W. Baelde