3.3.3 Les primitives solides infinies

Il y a cinq formes de primitives polynomiales qui sont potentiellement infinies, et ne conviennent pas à l'encapsulage automatique. Ce sont le plan, les cubiques, poly, quadriques et quartiques. Elles ont un intérieur bien défini et peuvent être utilisées dans des CSG, et dans une déclaration clipped_by. Comme les autres formes, elles peuvent être déplacées, tournées et retaillées.

3.3.3.1 Le plan

La primitive plane est une méthode simple pour définir une surface plate infinie. Le plan n'est pas une pellicule fine, ou ne peut pas être comparé à une feuille de papier. Un plan est un objet solide de taille infinie qui divise l'espace en deux parts, en-dedans et en-dehors du plan. Le plan est spécifié comme ceci :

PLANE:
	plane {
		<Normal>, Distance
		[OBJECT_MODIFIERS...]
	}

Le vecteur <Normal> définit la normale de surface du plan. Une normale de surface est un vecteur qui pointe vers le haut depuis la surface, perpendiculairement au plan. Il est suivi par une valeur numérique qui donne la distance du plan avec l'origine, dans l'axe de la normale (cela n'est vrai que si le vecteur de la normale a une longueur unitaire; voir plus loin). Par exemple :

plane {<0, 1, 0>, 4}

Ceci est un plan dont le dessus va dans la direction de l'axe des y. Il est à 4 unités de l'origine, dans cette direction. Parce que la plupart des plans sont définis avec des normales de surface dans la direction d'un axe, vous les verrez souvent définis avec l'utilisation des identificateurs de vecteur intégrés x, y ou z. L'exemple précédent peut être spécifié de cette manière :

plane {y, 4}

Le plan s'étend indéfiniment dans les directions x et z. Il divise le monde en deux parts. Par définition, les vecteurs de la normale pointent vers l'extérieur du plan. Cette distinction dedans/dehors n'est importante qu'avec l'utilisation des plans dans les CSG et clipped_by. C'est également important avec l'utilisation du brouillard ou du média atmosphérique. Si vous placez une caméra dans la moitié "interne" du monde, alors le brouillard ou le média n'apparaîtront pas. Cela arrive aussi avec les objets solides, mais c'est plus commun avec les plans. Les utilisateurs savent quand ils ont placé une caméra dans une sphère ou une boîte, mais "l'intérieur d'un plan" est un concept inhabituel. Vous pouvez inverser les propriétés dedans/dehors en ajoutant le modificateur d'objet inverse. Voir "Inverse" et "Les objets vides et pleins" pour les détails.

Un plan est appelé une forme polynomiale car il est défini par une équation polynomiale de premier ordre. Soit le plan :

plane {<A, B, C>, D}

il peut être représenté par l'équation A*x + B*y + C*z - D*sqrt(A^2 + B^2 + C^2) = 0.

Ainsi, notre exemple de plane {y, 4} est, actuellement, l'équation polynomiale y=4. Vous pouvez vous le représenter comme la série de tous les points x, y, z où la valeur de y égale 4, sans se soucier des valeurs x et z.

Cette équation est une polynôme de premier ordre car chaque terme ne contient que des puissances de un de x, y ou z. Une équation de second ordre a des termes comme x^2, y^2, z^2, xy, xz et yz. Un autre nom pour ces équations est quadrique. Les polynômes de troisième ordre sont les cubiques. Ceux de quatrième ordre sont les quartiques. De telles formes sont décrites plus bas.

3.3.3.2 Poly, cubique et quartique

Les surfaces polynomiales de haut ordre peuvent être définies par l'utilisation de la forme poly. La syntaxe est :

POLY:
	poly {
		Order, <A1, A2, A3,... An>
		[POLY_MODIFIERS...]
	}
POLY_MODIFIERS:
	sturm | OBJECT_MODIFIER

Les valeurs par défaut sont :

sturm : off

Order est un entier entre 2 et 15 inclus, qui spécifie l'ordre de l'équation. A1, A2, ... An sont les valeurs numériques pour les coefficients de l'équation. Il y a n termes de ce type quand n = ((Order+1)*(Order+2)*(Order+3))/6

L'objet cubic est une méthode alternative pour les polynômes de troisième ordre. Sa syntaxe est :

CUBIC:
	cubic {
		<A1, A2, A3,... A20>
		[POLY_MODIFIERS...]
	}

Les équations de quatrième ordre peuvent aussi être spécifiées par l'objet quartic. Sa syntaxe est :

QUARTIC:
	quartic {
		<A1, A2, A3,... A35>
		[POLY_MODIFIERS...]
	}

La table suivante montre les termes polynomiaux correspondant aux facteurs x, y et z pour les ordres 2 à 7. Souvenez vous que cubic est un polynôme de 3ème degré, et quartic de 4ème degré.

2nd 3rd 4th 5th 6th 7th 5th 6th 7th 6th 7th
A1 x2 x3 x4 x5 x6 x7 A41 y3 xy3 x2y3 A81 z3 xz3
A2 xy x2y x3y x4y x5y x6y A42 y2z3 xy2z3 x2y2z3 A82 z2 xz2
A3 xz x2z x3z x4z x5z x6z A43 y2z2 xy2z2 x2y2z2 A83 z xz
A4 x x2 x3 x4 x5 x6 A44 y2z xy2z x2y2z A84 1 x
A5 y2 xy2 x2y2 x3y2 x4y2 x5y2 A45 y2 xy2 x2y2 A85 y7
A6 yz xyz x2yz x3yz x4yz x5yz A46 yz4 xyz4 x2yz4 A86 y6z
A7 y xy x2y x3y x4y x5y A47 yz3 xyz3 x2yz3 A87 y6
A8 z2 xz2 x2z2 x3z2 x4z2 x5z2 A48 yz2 xyz2 x2yz2 A88 y5z2
A9 z xz x2z x3z x4z x5z A49 yz xyz x2yz A89 y5z
A10 1 x x2 x3 x4 x5 A50 y xy x2y A90 y5
A11 y3 xy3 x2y3 x3y3 x4y3 A51 z5 xz5 x2z5 A91 y4z3
A12 y2z xy2z x2y2z x3y2z x4y2z A52 z4 xz4 x2z4 A92 y4z2
A13 y2 xy2 x2y2 x3y2 x4y2 A53 z3 xz3 x2z3 A93 y4z
A14 yz2 xyz2 x2yz2 x3yz2 x4yz2 A54 z2 xz2 x2z2 A94 y4
A15 yz xyz x2yz x3yz x4yz A55 z xz x2z A95 y3z4
A16 y xy x2y x3y x4y A56 1 x x2 A96 y3z3
A17 z3 xz3 x2z3 x3z3 x4z3 A57 y6 xy6 A97 y3z2
A18 z2 xz2 x2z2 x3z2 x4z2 A58 y5z xy5z A98 y3z
A19 z xz x2z x3z x4z A59 y5 xy5 A99 y3
A20 1 x x2 x3 x4 A60 y4z2 xy4z2 A100 y2z5
A21 y4 xy4 x2y4 x3y4 A61 y4z xy4z A101 y2z4
A22 y3z xy3z x2y3z x3y3z A62 y4 xy4 A102 y2z3
A23 y3 xy3 x2y3 x3y3 A63 y3z3 xy3z3 A103 y2z2
A24 y2z2 xy2z2 x2y2z2 x3y2z2 A64 y3z2 xy3z2 A104 y2z
A25 y2z xy2z x2y2z x3y2z A65 y3z xy3z A105 y2
A26 y2 xy2 x2y2 x3y2 A66 y3 xy3 A106 yz6
A27 yz3 xyz3 x2yz3 x3yz3 A67 y2z4 xy2z4 A107 yz5
A28 yz2 xyz2 x2yz2 x3yz2 A68 y2z3 xy2z3 A108 yz4
A29 yz xyz x2yz x3yz A69 y2z2 xy2z2 A109 yz3
A30 y xy x2y x3y A70 y2z xy2z A110 yz2
A31 z4 xz4 x2z4 x3z4 A71 y2 xy2 A111 yz
A32 z3 xz3 x2z3 x3z3 A72 yz5 xyz5 A112 y
A33 z2 xz2 x2z2 x3z2 A73 yz4 xyz4 A113 z7
A34 z xz x2z x3z A74 yz3 xyz3 A114 z6
A35 1 x x2 x3 A75 yz2 xyz2 A115 z5
A36 y5 xy5 x2y5 A76 yz xyz A116 z4
A37 y4z xy4z x2y4z A77 y xy A117 z3
A38 y4 xy4 x2y4 A78 z6 xz6 A118 z2
A39 y3z2 xy3z2 x2y3z2 A79 z5 xz5 A119 z
A40 y3z xy3z x2y3z A80 z4 xz4 A120 1

Les formes polynomiales peuvent être utilisées pour décrire une large gamme de formes incluant les tores, le lemniscate, etc. Par exemple, la déclaration d'une surface quartique requiert que chacun des coefficients (A1 ... A35) soit placé dans l'ordre, dans un long vecteur unique de 35 termes. Comme exemple, définissons un tore selon cette méthode ardue. Un tore peut être représenté par l'équation : x4 + y4 + z4 + 2 x2 y2 + 2 x2 z2 + 2 y2 z2 - 2 (r_02 + r_12) x2 + 2 (r_02 - r_12) y2 - 2 (r_02 + r_12) z2 + (r_02 - r_12)2 = 0

Où r_0 est le rayon majeur du tore, la distance entre le centre du trou et le centre de l'anneau, et r_1 est le rayon mineur du tore, la distance entre le milieu de l'anneau et la surface extérieure. La déclaration d'objet suivante est pour un tore avec un rayon majeur de 6.3 et un rayon mineur de 3.5 (rendant la largeur maximale juste inférieure à 20).

// Torus having major radius sqrt(40), minor radius sqrt(12)
quartic {
	<1, 0, 0, 0, 2, 0, 0, 2, 0,
	-104, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 1, 0, 0, 2, 0, 56, 0,
	0, 0, 0, 1, 0,-104, 0, 784>
	sturm
}

Poly, cubiques et quartiques sont comme les quadriques, en cela que vous n'avez pas besoin de savoir lequel est utilisé. Le fichier shapesq.inc a plein de quartiques prédéfinis pour vous permettre de jouer.

Les poly utilisent des calculs très complexes, et ne se rendent pas toujours parfaitement. Si la surface n'est pas lisse, a des trous, ou des pixels supplémentaires, essayez l'utilisation du mot clé optionnel sturm dans la définition. Cela entraînera l'utilisation d'une méthode de calcul plus lente, mais plus précise. Habituellement, mais pas toujours, cela résoudra le problème. Si cela ne fonctionne pas, essayez de tourner ou de déplacer la forme, d'une petite valeur.

Il y a tellement de formes quartiques différentes, que nous ne pouvons pas toutes les décrire. Si vous êtes intéressé, et friand de mathématiques, nous vous suggérons de trouver un livre de référence.

3.3.3.3 Le quadrique

L'objet quadric peut produire des formes comme les paraboloïdes (formes de cuvette) et hyperboloïdes (formes de selles et de verres de montre). Il peut aussi produire les ellipsoïdes, les sphères, les cônes, les cylindres, mais vous devez plutôt utiliser les objets intégrés de POV-Ray, car ils sont plus rapides.

Note : vous ne devez pas confondre les "quaDRiques" et les "quaRTiques". Un quadrique est un polynôme de second degré, tandis que le quartique est de quatrième ordre.

Les quadriques se rendent beaucoup plus vite, et sont moins sujets aux erreurs, mais produisent des objets moins complexes. La syntaxe est :

QUADRIC:
	quadric {
		<A, B, C>, <D, E, F>, <G, H, I>, J
		[OBJECT_MODIFIERS...]
	}

Bien que la syntaxe analysera 3 expressions vectorielles, suivies d'un numérique, nous avons écrit la syntaxe traditionnelle où A à J sont des expressions numériques. Ces 10 numériques définissent une surface de points x, y, z qui satisfont l'équation A x2 + B y2 + C z2 + D xy + E xz + F yz + G x + H y + I z + J = 0

Des valeurs différentes de A, B, C, ... J donneront des formes différentes. Pour n'importe quel point tridimensionnel, l'utilisation de ses coordonnées x, y et z dans cette équation, donnera le résultat 0 si le point est sur la surface de l'objet, négatif si le point est dans l'objet, et positif s'il est hors de l'objet. Voici quelques exemples :

X2 + Y2 + Z2 - 1 = 0 Sphère
X2 + Y2 - 1 = 0 Cylindre infini le long de l'axe z
X2 + Y2 - Z2 = 0 Cône infini le long de l'axe z

La façon la plus simple d'utiliser ces formes est d'inclure le fichier standard shapes.inc dans votre programme. Il contient de nombreux quadriques prédéfinis, et vous pouvez transformer ces formes (en utilisant le déplacement, la rotation et le changement de taille) selon ce que vous voulez. Pour une liste complète, voir le fichier shapes.inc.

3.3.2 Les primitives de surface finies 3.3.2 Les primitives de surface finies 3.3.4 L'objet isosurface 3.3.4 L'objet isosurface