vers l'index général de l'aide
Le tableau est mort, un nouveau tableau est appelé arraygner :-)
Créer des tableaux de données indexés de 1 à 5 dimensions.
POV-Ray 3.1 + sup.
//initialisation d'un tableau à 1 dimension : #declare MonTableau = array[Dimension] //on peut aussi en profiter pour introduire des valeurs : #declare MonTableau = array[Dimension] {Valeur1, Valeur2, Valeur3,...} //initialisation d'un tableau à 2 dimensions : #declare MonTableau = array[Dimension1][Dimension2] {ValeurA1, ValeurA2, ValeurA3,... ValeurB1, ValeurB2, ValeurB3,... ValeurC1, ValeurC2, ValeurC3,... ...}
...et ainsi de suite jusqu'à un maximum de 5 dimensions (bien qu'il soit difficile de se réprésenter mentalement un tableau à 5 dimensions !!). Le nombre entier entre les crochets représente la taille du tableau pour chaque dimension. Tous les types de données (entiers, décimaux, chaînes, identificateurs,...) peuvent être placés dans un tableau, mais il est impératif qu'un tableau ne contienne qu'un seul type de données. Il n'est pas question que certaines "cases" contiennent des couleurs, et d'autres des chaînes.
//introduction d'une valeur dans un tableau : #declare MonTableau [Position] = Valeur #declare MonTableau [PositionH][PositionV] = Valeur //extraction de la valeur d'une "case" #declare Variable = MonTableau [Position]
Les positions des éléments d'un tableau sont numérotées à partir de 0 : array[4] contient 4 éléments numérotés 0, 1, 2, et 3. N'oubliez pas cela lorsque vous utilisez des boucles pour lire le contenu d'un tableau.
Lorsque un tableau est initialisé sans valeurs de départ, ses "cases" sont vides, et le restent jusqu'à ce que une donnée y soit placée. Tenter de lire la valeur d'une "case" vide produira une erreur.
#declare Tab = array[4] #declare Tab[2] = pigment{White} // premier élément initialisé avec un pigment #declare Tab[1] = 45 // ERREUR - doit être un pigment #declare Tab[3] = pigment{Red} #declare Tab[0] = pigment{Black} #declare Tab[4] = pigment{Blue} // ERREUR - il n'y a que quatre éléments dans ce tableau (index 0 à 3)
#declare Tab1 = array[4] // tableau non initialisé de 4 éléments #declare Tab2 = array[3][2] // tableau non initialisé à 2 dimensions 3 lignes et 2 colonnes = 6 éléments #declare Tab_Couleur = array[2] {Black,White} // tableau initialisé de 2 éléments (Couleur)
Ces fonctions sont également expliquées dans les sections idoines. Rappel.
dimension retourne le nombre de dimensions d'un tableau (de 1 à 5, donc). dimension_size retourne le nombre de "cases" pour une dimension donnée.
#declare MonTab = array[3][5][2] dimension (MonTab) // retourne le nombre de dimensions du tableau, soit 3 dimension_size( MonTab,2) // retourne le nombre d'élément dans la rangé 2, en l'occurence 5.
Nous tracerons une sinusoïde par l'initialisation et lecture d'un tableau à l'aide d'une boucle while
(voir la directive while).
//-- Déclaration et initialisation du tableau #declare Dim = 50; #declare Tab = array [2][Dim] // Déclaration d'un Tableau à deux dimension 2 lignes et Dim colonnes . #declare A= 0; #while (A < Dim) // tant que A est plus petit que le nombre d'élément de la ligne 2 #declare V=sin(degrees(A*360*0.11)); // valeur que l'on mettra dans le tableau #declare Tab [0][A]=(<A*.5,V+1,0>); // initialisation du Tableau ligne 1 #declare Tab [1][A]=(<V^2,V+.5,V^3>); // initialisation du Tableau ligne 2 #declare A = A+1; // incremente l'indice de la ligne #end //--Lecture du tableau---------- #declare D1 = 0; #declare D2 = 0; #while (D1 < dimension_size( Tab,1)) // tant que D1 est plus petit que le nombre d'élément de la ligne 1 #while (D2 < dimension_size( Tab,2)) // tant que D2 est plus petit que le nombre d'élément de la ligne 2 sphere { Tab[0][D2],.3 pigment {color Tab[1][D2] }translate x*-(Dim/5)} #declare D2=D2+1; #end // fin de la boucle ligne 2 #declare D1=D1+1; #end // fin de la boucle ligne 1
Les grands tableaux non initialisés ne consomment pas beaucoup de mémoire. Ce sont des tableaux de pointeurs, n'occupant que 4 octets par élément. Une fois initialisés, ils consomment une mémoire dépendante de ce que vous y mettez. Les règles pour les tableaux locaux/globaux (#local / #declare) sont les mêmes que pour les autres identificateurs. Notez que cela s'applique pour tout le tableau. Vous ne pouvez pas mélanger des éléments globaux et locaux dans le même tableau.
Techniquement, on peut spécifier une valeur décimale pour la dimension d'un tableau (array[1.24]), POV-Ray arrondira automatiquement cette valeur vers le bas (array[1]).
MegaPOV permet d'utiliser la directive #ifdef avec n'importe quel élément d'un tableau.
#declare MonTableau = array [10][10] #ifdef (MonTableau[2][5])
Rédacteur: Martial Rameaux