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().