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.
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.
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
où 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.
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.4 L'objet isosurface |