IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Description of Objects in VPython

Le vecteur (vector)

Le vecteur n'est pas un objet dessinable mais il est d'une aide puissante pour les calculs 3D. Ses propriétés sont semblables à celles des vecteurs utilisés en science ou en ingénierie. Il peut être utilisé en même temps que les tableaux de Numeric. (Numeric est un module ajouté à Python pour fournir des possibilités de calcul ultra-rapide à travers un traitement optimisé des tableaux. Le module Numeric est importé automatiquement par Visual.)

vector(x,y,z)

Retourne un vecteur avec les composantes données qui sont transformées en virgules flottantes (Ainsi, 3 est converti en 3.0).

Les vecteurs peuvent être ajoutés ou soustraits l'un de l'autre, ou multipliés par un nombre ordinaire. Par exemple,

v1 = vector(1,2,3)

v2 = vector(10,20,30)

print v1+v2 # affiche (11 22 33)

print 2*v1 # affiche (2 4 6)

Vous pouvez faire référence à une composante individuelle d'un vecteur:

v2.x vaut 10, v2.y vaut 20, v2.z vaut 30

Il est permis de créer un vecteur à partir d'un autre: vector(v2) vaut ainsi vector(10,20,30).

La forme vector(10,12) a la même signification que vector(10,12,0).

Un vecteur est une séquence Python, ainsi v2.x est équivalent à v2[0], v2.y est équivalent à v2[1], et v2.z est équivalent à v2[2].

mag( vector ) # calcule la norme du vecteur

mag(vector(1,1,1)) # est égal à racine(3)

mag2(vector(1,1,1)) # est égal à 3, la norme au carré

Vous pouvez aussi obtenir la norme du vecteur avec la forme v2.mag, et le carré de la norme du vecteur avec v2.mag2.

Il est possible de redéfinir la norme ou la norme au carré d'un vecteur:

v2.mag = 5 # définit la norme de v2 à 5

v2.mag2 = 2.7 # définit le carré de la norme de v2 à 2.7

Vous pouvez redéfinir la norme à 1 avec norm():

norm( vector ) # normalisé; norme de 1

norm(vector(1,1,1)) # vaut vector(1,1,1)/sqrt(3)

Vous pouvez aussi écrire v1.norm(). Comme norm(v1) = v1/mag(v1), il n'est pas possible de normer un vecteur de longueur 0: norm(vector(0,0,0)) retourne une erreur, car la division par zéro est interdite.

vector1.diff_angle(vector2)

Calcule l'angle entre deux vecteurs (la "différence" des angles de deux vecteurs)..

cross( vector1, vector2 )

Calcule le produit vectoriel de deux vecteurs, qui est un vecteur orthogonal au plan défini par les vecteurs vector1 et vector2, dans une direction définie par la règle de la main droite: si les doigts de la main droite se plient de vector1 vers vector2, le pouce pointe dans la direction du produit vectoriel. La norme de ce vecteur est égale au produit des normes de vector1 et vector2, multiplié par le sinus des angles entre les deux vecteurs.

dot( vector1, vector2 )

Calcule le produit scalaire de deux vecteurs, qui est un nombre ordinaire égal au produit des normes des vecteurs vector1 et vector2, multiplié par le cosinus de l'angle entre les deux vecteurs. Si les deux vecteurs sont normés, le produit scalaire retourne le cosinus de l'angle entre les vecteurs, qui est souvent utile.

 

Rotation d'un vecteur

v2 = rotate(v1, angle=theta, axis=(1,1,1))

L'axe par défaut est (0,0,1), pour une rotation dans le plan xy autour de l'axe z. Il n'y a pas d'origine pour une rotation de vecteur. Remarquez aussi que la rotation d'un vecteur se fait par une fonction, v = rotate(), comme c'est le cas avec d'autres manipulations vectorielles telles que dot() ou cross(), tandis que la rotation d'objets graphiques se fait par des attributs, avec la forme object.rotate().

 

Conversion pratique

Par commodité, Visual convertit automatiquement (a,b,c) en vector(a,b,c), avec des valeurs à virgule flottante, lors de la création d'objets Visual: sphere.pos=(1,2,3) est équivalent à sphere.pos=vector(1.,2.,3.). Cependant, utiliser la forme (a,b,c) directement dans des calculs vectoriels entraînera des erreurs, parce (a,b,c) n'est pas un vecteur; écrivez vector(a,b,c) à la place.

Vous pouvez convertir un vecteur vec1 en un tuple Python (a,b,c) avec tuple(vec1) ou avec une option beaucoup plus rapide vec1.as_tuple().



Copyright © 2006 Guillaume et Yoann Duriaud. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.