vers l'index général de l'aide

les vecteurs

introduction

Dans POV-Ray, un vecteur est le plus souvent un moyen de spécifier les coordonnées d'un point en 2D ou en 3D

Mathématiquement, un vecteur, qui est représenté par une flèche, a quatre caractéristique : une origine (point de départ), un sens, une direction, et une longueur (ou intensité). Dans POV-Ray, l'origine implicite du vecteur est toujours l'origine du système d'axes (<0,0,0>), et son sens, sa direction et sa longueur sont déterminés par la coordonnée, qui est en quelque sorte le point d'arrivée.

Dans la majorité des cas, le vecteur ne servira qu'à repérer un point de l'espace, mais il sert parfois à spécifier une direction et une intensité, pour la turbulence par exemple.

syntaxe

un vecteur 2D :

<x,y>

un vecteur 3D :

<x,y,z>

Les vecteurs peuvent être déclarés via #declare ou #local, et il est possible d'extraire la valeur décimale d'un des composants d'un vecteur. N'oubliez pas le point-virgule après chaque déclaration de vecteur.

#declare Vecteur1 = <12,8,35>
#declare Machin1 = Vecteur1.x;  //Machin1 vaudra 12
#declare Machin2 = Vecteur1.y;  //Machin2 vaudra 8
#declare Machin3 = Vecteur1.z;  //Machin3 vaudra 35

Si, au lieu d'un vecteur, vous spécifiez un nombre décimal, celui-ci sera automatiquement converti en un vecteur dont tous les composants sont égaux à ce nombre. C'est ce qu'on appelle la "promotion".

sphere {0,1} //équivaut à ...
sphere {<0,0,0>,1}
 

Attention, si vous spécifiez un vecteur comportant moins de composants que le vecteur attendu par POV-Ray, les autres composants vaudront 0.

sphere {<12,5>,1} //équivaut à ...
sphere {<12,5,0>,1}

Enfin, toute expression mathématique valide retournant un nombre décimal peut être entrée comme composant d'un vecteur :

sphere {<A+B,C*(D+E),pow(A,D)>,2}

opérations sur les vecteurs

Additions, soustractions, etc..

<a,b,c> + <d,e,f> = <a+d,b+e,c+f>
<a,b,c> * <d,e,f> = <a*d,b*e,c*f>
...

..et ainsi de suite, l'expression étant évaluée composant par composant.

couleurs

Des vecteurs sont également utilisés pour définir les couleurs, mais leur emploi présente parfois quelques particularités. Voyez donc la section consacrée aux couleurs.

vecteurs prédéfinis

Ces vecteurs ne peuvent pas être redéfinis. Leur usage apporte un peu de confort au moment du codage, et surtout plus de lisibilité.

x = <1, 0, 0>
y = <0, 1, 0>
z = <0, 0, 1>
t = <0, 0, 0, 1>
u = <1, 0>
v = <0, 1>

//exemple : 
plane {<0,1,0>,0}  //équivaut à ..
plane {y,0}        //qui est plus lisible

//autre exemple :
object {Machin translate <12,0,0>}  //équivaut à ..
object {Machin translate x*12}

fonctions retournant des vecteurs

vaxis_rotate(A,B,F) : fait effectuer au vecteur A une rotation de F degrés autour de l'axe défini par le vecteur F.
vcross(A,B) : produit croisé(???) des vecteurs A et B. Le vecteur résultant est perpendiculaire à A et B, et sa longueur est proportionnelle à l'angle entre ces vecteurs.
vnormalize(A) : retourne un vecteur dont le sens et la direction sont égaux à ceux de A, mais dont la longeur vaut 1 unité.
vrotate(A,B) : fait effectuer au vecteur A une rotation spécifiée par le vecteur B (comme une rotation "classique" avec rotate).

Les fonctions suivantes retournent des nombres décimaux, mais utilisent des vecteurs. Elles sont rappelées ici par commodité.

vdot (Vec1,Vec2) retourne le produit scalaire (somme de la multiplication de chaque composant) des deux vecteurs spécifiés. En clair : vdot (<a,b,c>,<d,e,f>) = a*d + b*e + c*f
vlenght (Vect) retourne la longueur du vecteur Vect (distance entre l'origine et le point <x,y,z>).

rédacteur : Fabien Mosen