3.6.12 shapes.inc, shapes_old.inc, shapes2.inc, shapesq.inc

Ces fichiers contiennent des formes prédéfinies et des macros de génération de forme.

"shapes.inc" inclut "shapes_old.inc" et contient plusieurs macros pour travailler avec les objets, et pour créer des objets spéciaux, comme du texte bisauté, des champs de niveaux sphériques et des formes arrondies.

Beaucoup d'objets dans "shapes_old.inc" ne sont pas très utiles dans les nouvelles versions de POV-Ray, et sont conservés pour des besoins de compatibilité avec d'anciennes scènes écrites pour des versions de POV-Ray qui manquaient de primitives comme les cônes, disques, plans, etc.

Le fichier "shapes2.inc" contient quelques formes plus utiles, incluant les polyhèdres réguliers, et "shapesq.inc" contient plusieurs définitions de formes quartiques et cubiques.

Certaines de ces formes de "shapesq.inc" seront plus faciles à générer, plus flexibles et probablement plus rapides en tant qu'isosurfaces, mais elles sont toujours utiles pour deux raisons : compatibilité ascendante et le fait que les isosurfaces sont toujours finies.

3.6.12.1 shapes.inc

Isect(Pt, Dir, Obj, OPt) et IsectN(Pt, Dir, Obj, OPt, ONorm)
Ces macros sont des interfaces à la fonction trace(). Isect() ne renvoie que le point d'intersection, IsectN() renvoie aussi la normale de surface. Ces macros renvoient le point et l'information de la normale à travers leurs paramètres, et le vrai ou faux dépend de la découverte de l'intersection :
Si une intersection est trouvée, elles renvoient vrai et mettent OPt au point d'intersection, et ONorm à la normale. Sinon elles renvoient faux, et elles ne modifient pas OPt ou ONorm.
Paramètres :


Extents(Obj, Min, Max). Cette macro est un raccourci pour appeler à la fois min_extent() et max_extent() pour avoir les coins de la boîte englobante d'un objet. Elle renvoie ces valeurs à travers les paramètres Min et Max.
Paramètres :


Center_Object(Object, Axis). Un raccourci pour utiliser la macro Center_Trans() avec un objet.
Paramètres :


Align_Object(Object, Axis, Pt). Un raccourci pour l'utilisation de la macro Align_Trans() avec un objet.
Paramètres :


Bevelled_Text(Font, String, Cuts, BevelAng, BevelDepth, Depth, Offset, UseMerge). Cette macro tente de "bisauter" l'objet texte. Elle le fait en créant une intersection de plusieurs copies du texte, chacune tournée dans une direction différente. Le résultat n'est pas parfait, mais il peut être acceptables selon l'objectif. Attention : l'objet généré peut se rendre beaucoup plus lentement que l'objet texte ordinaire.
Paramètres :


Text_Space(Font, String, Size, Spacing). Calcule la longueur d'un texte, incluant les espaces, cela renvoie la longueur de toutes les n lettres. Text_Space donne l'espace qu'un texte, ou un glyphe, occupe pour son voisinage.
Paramètres :


Text_Width(Font, String, Size, Spacing). Calcule la longueur d'un texte, et renvoie la longueur des premières n-1 lettres, plus la longueur du glyphe de la dernière lettre. Text_Width donne la longueur physique d'un texte, et si vous utilisez seulement une lettre, la longueur physique d'un glyphe.
Paramètres :


Align_Left, Align_Right, Align_Center. Ces constantes sont utilisées par la macro Circle_Text().

Circle_Text(Font, String, Size, Spacing, Depth, Radius, Inverted, Justification, Angle). Crée un objet texte avec le haut des cellules de caractères sur un arc de cercle. Cette macro doit être utilisée dans un bloc object{...}.
Paramètres :


Wedge(Angle). Cette macro crée une forme anguleuse infinie, une intersection entre deux plans. C'est principalement utile dans le CSG, par exemple pour obtenir l'arc spécifique d'un tore. Le bord de l'angle est positionné le long de l'axe y, et un côté est fixé au plan zy, l'autre côté tourne dans le sens des aiguilles d'une montre autour de l'axe y.
Paramètres :


Spheroid(Center, Radius). Cette macro crée une sphère de dimension inégale. Le rayon est un vecteur où chaque composant est le rayon le long de cet axe.
Paramètres :


Supertorus(MajorRadius, MinorRadius, MajorControl, MinorControl, Accuracy, MaxGradient). Cette macro crée une isosurface du tore équivalente au superellipsoïde. Si vous spécifiez un MaxGradient de moins de 1, une évaluation sera utilisée. Vous devrez ajuster MaxGradient pour combler les paramètres choisis, un supertore carré aura un plus haut gradiant. Vous pouvez vouloir utiliser la fonction seule sur votre propre isosurface.
Paramètres :


Supercone(EndA, A, B, EndB, C, D). Cette macro crée un objet similaire à un cône, mais où les terminaisons sont des ellipses. L'objet est une intersection d'un quartique et d'un cylindre.
Paramètres :


Connect_Spheres(PtA, RadiusA, PtB, RadiusB). Cette macro crée un cône qui joint doucement deux sphères. Elle ne crée que l'objet cône, par conséquent, vous devez fournir les sphères ou utiliser la macro Round_Cone2().
Paramètres :


Wire_Box_Union(PtA, PtB, Radius),
Wire_Box_Merge(PtA, PtB, Radius),
Wire_Box(PtA, PtB, Radius, UseMerge)
. Crée une boîte fil-de-fer avec des cylindres et des sphères. L'objet entrera entièrement dans un objet boîte avec les mêmes coins.
Paramètres :


Round_Box_Union(PtA, PtB, EdgeRadius),
Round_Box_Merge(PtA, PtB, EdgeRadius),
Round_Box(PtA, PtB, EdgeRadius, UseMerge)
. Crée une boîte à bords arrondis depuis d'autres boîtes, cylindres et sphères. L'objet entrera entièrement dans un objet boîte avec les mêmes coins. Le résultat est légèrement différent d'un superellipsoïde qui n'a pas d'aires vraiment planes.
Paramètres :


Round_Cylinder_Union(PtA, PtB, Radius, EdgeRadius),
Round_Cylinder_Merge(PtA, PtB, Radius, EdgeRadius),
Round_Cylinder(PtA, PtB, Radius, EdgeRadius, UseMerge)
. Crée un cylindre avec des bords arrondis depuis des cylindres et des tores. L'objet entrera complètement dans un objet cylindre ayant les mêmes terminaisons et rayon. Le résultat est légèrement différent d'un superellipsoïde, qui n'a pas d'aire vraiment plane.
Paramètres :


Round_Cone_Union(PtA, RadiusA, PtB, RadiusB, EdgeRadius),
Round_Cone_Merge(PtA, RadiusA, PtB, RadiusB, EdgeRadius),
Round_Cone(PtA, RadiusA, PtB, RadiusB, EdgeRadius, UseMerge)
Crée un cône avec des bords arrondis depuis des cônes et des tores. Le résultat tiendra entièrement dans un objet cône avec les mêmes points de terminaison et rayons.
Paramètres :


Round_Cone2_Union(PtA, RadiusA, PtB, RadiusB),
Round_Cone2_Merge(PtA, RadiusA, PtB, RadiusB),
Round_Cone2(PtA, RadiusA, PtB, RadiusB, UseMerge)
. Crée un cône avec des bords arrondis depuis un cône et deux sphères. Le résultat n'entrera pas exactement dans un objet cône avec les mêmes terminaisons et rayon à cause des fins sphériques. Les points de terminaison ne sont pas utilisés pour la portion cônique, mais pour les sphères, un cône approprié est alors généré pour les joindre doucement.
Paramètres :


Round_Cone3_Union(PtA, RadiusA, PtB, RadiusB),
Round_Cone3_Merge(PtA, RadiusA, PtB, RadiusB)
Round_Cone3(PtA, RadiusA, PtB, RadiusB, UseMerge)
. Comme Round_Cone2(), cela crée un cône avec des bords arrondis depuis un cône et deux sphères, et l'objet ne tiendra pas exactement dans un objet cône avec les mêmes terminaisons et rayon à cause des fins sphériques. La différence est que cette macro prend les points des terminaisons pour la portion cônique et déplace les sphères pour se fondre avec la surface, au lieu de les poser aux points de terminaison et générer un cône pour les joindre.
Paramètres :


Quad(A, B, C, D) et Smooth_Quad(A, NA, B, NB, C, NC, D, ND). Ces macros créent des objet polygonaux à 4 faces en utilisant des paires de triangles.
Paramètres :

3.6.12.1.1 Les macros HF

Il y a plusieurs macros HF dans shapes.inc, qui génèrent des maillages de différentes formes. Toutes les macros HF ont ceci en commun :

L'utilisation des différentes macros HF est décrite plus bas.


HF_Square (Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, MnExt, MxExt). Cette macro génère un maillage dans un champ de niveaux carré, identique à la primitive intégrée de champ de niveaux. Voyez aussi la description générale de la macro HF au-dessus.
Paramètres :


HF_Sphere(Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, Center, Radius, Depth). Cette macro génère un maillage de la forme d'un champ de niveaux sphérique. Quand l'application UV est utilisée, le carré UV sera appliqué autour de la sphère en commençant à +x et allant dans le sens inverse des aiguilles d'une montre autour de l'axe y. Voir aussi la description générale des macros HF au-dessus.
Paramètres :


HF_Cylinder(Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, EndA, EndB, Radius,Depth). Cette macro génère un maillage de la forme d'un champ de niveaux cylindrique ouvert. Quand l'application UV est utilisée, le carré UV sera appliqué autour du cylindre. Voir aussi la description générale des macros HF au-dessus.
Paramètres :


HF_Torus (Function, UseUVheight, UseUVtexture, Res, Smooth, FileName, Major, Minor, Depth). Cette macro génère un maillage de la forme d'un champ de niveau torique. Quand l'application UV est utilisée, le carré UV est appliqué autour comme pour l'application sphérique ou cylindrique. Toutefois, les bords de l'application passent au-dessus et en-dessous du tore où ils se rencontrent sur l'anneau interne. Voir aussi la description générale des macros HF au-dessus.
Paramètres :

3.6.12.2 shapes_old.inc

Ellipsoid, Sphere
Sphère d'une unité de rayon placée à l'origine.

Cylinder_X, Cylinder_Y, Cylinder_Z
Cylindres infinis.

QCone_X, QCone_Y, QCone_Z
Cônes infinis.

Cone_X, Cone_Y, Cone_Z
Cônes fermés : rayon d'une unité à -1 et rayon nul à +1 le long de chaque axe.

Plane_YZ, Plane_XZ, Plane_XY
Plans infinis passant par l'origine.

Paraboloid_X, Paraboloid_Y, Paraboloid_Z
y^2 + z^2 - x = 0

Hyperboloid, Hyperboloid_Y
y - x^2 + z^2 = 0

UnitBox, Cube
Un cube de 2 unités sur chaque côté, centré à l'origine.

Disk_X, Disk_Y, Disk_Z
Cylindres fermés, avec un rayon de 1 unité et une longueur de 2 unités, centrés sur l'origine.

3.6.12.3 shapes2.inc

Tetrahedron
Polyhèdre régulier à 4 côtés.

Octahedron
Polyhèdre régulier à 8 côtés.

Dodecahedron
polyhèdre régulier à 12 côtés.

Icosahedron
Polyhèdre régulier à 20 côtés.

Rhomboid
Diamant à 4 côtés tri-dimensionnel, une boîte de base cisaillée.

Hexagon
Polygone plein régulier à 6 côtés, axé le long de x.

HalfCone_Y
Primitive cône fini classique, pointant selon l'axe y.

Pyramid
Pyramide à 4 côtés (union de triangles, ne peut pas être utilisé dans un CSG).

Pyramid2
Pyramide à 4 côtés (intersection de plans, peut être utilisé dans un CSG).

Square_X, Square_Y, Square_Z
Plans finis d'une unité le long de chaque axe. En d'autres mots, carrés de 2X2 unités.

3.6.12.4 shapesq.inc

Bicorn
Cette courbe ressemble au haut d'un paraboloïde, isolé par un autre paraboloïde. L'équation de base est :
y^2 - (x^2 + z^2) y^2 - (x^2 + z^2 + 2 y - 1)^2 =

Crossed_Trough
Ceci est une surface avec quatre pièces qui gît sur le plan x-z.
L'équation est : y = x^2 z^2

Cubic_Cylinder
Une goutte jaillissant de l'eau ? Ceci est la courbe formée par l'équation :
y = 1/2 x^2 (x + 1)
puisque le rayon d'un cylindre a l'axe x comme axe central, la forme finale de l'équation est :
y^2 + z^2 = 0.5 (x^3 + x^2)

Cubic_Saddle_1
Une selle cubique. L'équation est : z = x^3 - y^3

Devils_Curve
Variante de la courbe du diable en 3D. Cette figure a une partie haute et basse très similaires à l'hyperboloïde d'une feuille, toutefois, la région centrale est pincée en son centre, laissant deux trous en forme de larme. L'équation est :
x^4 + 2 x^2 z^2 - 0.36 x^2 - y^4 + 0.25 y^2 + z^4 = 0

Folium
Ceci est un folium pivoté sur l'axe x. La formule est :
2 x^2 - 3 x y^2 - 3 x z^2 + y^2 + z^2 = 0

Glob_5
Genre de globe - sorte de forme en larme. L'équation est :
y^2 + z^2 = 0.5 x^5 + 0.5 x^4

Twin_Glob
Variante d'un lemniscate - les deux lobes ressemblent plus à des larmes.

Helix, Helix_1
Approximation de l'hélice z = arctan(y/x). L'hélice peut être estimée avec une équation algébrique (gardée dans la fourchette d'un quartique) avec les phases suivantes :
tan(z) = y/x => sin(z)/cos(z) = y/x =>
(1) x sin(z) - y cos(z) = 0
Utilisation de l'expansion de taylor pour sin, cos pour z = 0,
sin(z) = z - z^3/3! + z^5/5! - ...
cos(z) = 1 - z^2/2! + z^6/6! - ...
Rejet des termes de plus grand ordre, l'expression (1) peut être écrite ainsi :
x (z - z^3/6) - y (1 + z^2/2) = 0, ou

(2) -1/6 x z^3 + x z + 1/2 y z^2 - y = 0
Cette hélice (2) tourne de 90 degrés dans la fourchette 0 <= z <= sqrt(2)/2. En utilisant la dimension <2 2 2>, l'hélice définie ci-dessous tourne de 90 degrés dans la fourchette 0 <= z <= sqrt(2) = 1.4042.

Hyperbolic_Torus
Tore hyperbolique ayant le rayon majeur sqrt(40), le rayon mineur sqrt(12). Cette figure est générée par le balayage d'un cercle le long des bras d'une hyperbole. L'équation est :
x^4 + 2 x^2 y^2 - 2 x^2 z^2 - 104 x^2 + y^4 - 2 y^2 z^2 + 56 y^2 + z^4 + 104 z^2 + 784 = 0

Lemniscate
Lemniscate de Gerono. Cette figure ressemble à deux larmes connectées par leurs pointes. Elle est formée par rotation du Lemniscate de Gerono autour de l'axe x. La formule est :
x^4 - x^2 + y^2 + z^2 = 0

Quartic_Loop_1
Ceci est une figure avec une feuille bosselée sur un côté et quelque chose qui ressemble à un paraboloïde (mais avec un bulbe interne). La formule est :
(x^2 + y^2 + a c x)^2 - (x^2 + y^2)(c - a x)^2
-99*x^4+40*x^3-98*x^2*y^2-98*x^2*z^2+99*x^2+40*x*y^2
+40*x*z^2+y^4+2*y^2*z^2-y^2+z^4-z^2

Monkey_Saddle
Cette surface a trois parties qui glissent vers le haut, et trois vers le bas. Cela donne une selle qui a la place pour deux jambes et une queue... L'équation est :
z = c (x^3 - 3 x y^2)
La valeur c donne une échelle verticale pour la surface - plus la valeur c est petite, plus la surface est plate (près de l'origine).

Parabolic_Torus_40_12
Tore parabolique ayant un rayon majeur sqrt(40), un rayon mineur sqrt(12). Cette figure est générée par balayage d'un cercle le long des bras d'une parabole. L'équation est :
x^4 + 2 x^2 y^2 - 2 x^2 z - 104 x^2 + y^4 - 2 y^2 z + 56 y^2 + z^2 + 104 z + 784 = 0

Piriform
Cette figure est formée par balayage d'un piriform le long de l'axe x. Une forme de base de l'équation est :
(x^4 - x^3) + y^2 + z^2 = 0.

Quartic_Paraboloid
Parabole quartique - un polynome de quatrième degré (a deux bosses au sommet) qui a été glissé le long de l'axe z. L'équation est :
0.1 x^4 - x^2 - y^2 - z^2 + 0.9 = 0

Quartic_Cylinder
Cylindre quartique - une aiguille spatiale ?

Steiner_Surface
Surface de Steiners quartique

Torus_40_12
Tore avec un rayon majeur sqrt(40), un rayon mineur sqrt(12).

Witch_Hat
Sorcière d'Agnesi.

Sinsurf
Approximation très grossière d'une surface d'onde sinusoïdale z = sin(2 pi x y).
Dans le but d'avoir une bonne approximation à 7 décimales à une distance de 1 depuis l'origine, il faut un degré polynomial de 60, qui nécessiterait environ 200,000 coefficients. Pour de meileurs résultats, dimensionnez par quelque chose comme <1 1 0.2>.
3.6.11 rand.inc 3.6.11 rand.inc 3.6.13 skies.inc, stars.inc 3.6.13 skies.inc, stars.inc