|
Existen cinco formas primitivas polinómicas, infinitas en potencia,
y que no responden al acotado automático. Son el plano y las curvas cúbicas, cuádricas, cuárticas y polinómicas. Tienen un interior
definido y pueden usarse en operación de CSG, o dentro de una sentencia clipped_by
.
Como el resto de formas, pueden trasladarse, rotarse o escalarse.
La primitiva plane
es la manera más simple de definir
una superficie plana infinita. El plano no es como una hoja de papel,
si no que es un objeto sólido de tamaño infinito que divide en dos
partes el POV-espacio: el interior y el exterior del plano. El plano se
especifica de la siguiente forma:
PLANE: plane { <Normal>, Distancia [MODIFICADORES_DE_OBJETOS...] }
El vector <Normal>
define la normal a la
superficie del plano, esto es, el vector que apunta hacia arriba desde
la superficie en un ángulo de 90 grados. El valor de coma flotante
siguiente es la distancia desde el origen a la que se sitúa el plano,
en la dirección de la normal (esto es sólo cierto si el vector de la
normal es unitario: véase más abajo). Por ejemplo:
plane { <0, 1, 0>, 4 }
Éste es un plano cuya normal se define en la dirección +y, a 4
unidades de distancia del origen en esa misma dirección. Ya que la
mayoría de los planos se definen con normales orientadas en la
dirección de los ejes, los verás a menudo definidos mediante los
identificadores predefinidos x
, y
o z
.
El plano del ejemplo anterior podría definirse también como:
plane { y, 4 }
Este plano se extiende infinitamente en las direcciones x
y z
. Divide efectivamente el mundo en dos partes. Por
definición, el vector de la normal apunta hacia el exterior del plano,
mientras que los puntos por debajo de él pertenecen al interior. Esta
distinción entre exterior e interior es importante cuando se usan los
planos en operaciones CSG o con clipped_by
. También es
importante cuando se usa niebla o medios atmosféricos. Si sitúas la
cámara en el interior de un plano, la niebla o el medio no serán
visibles. Esto sucede con cualquier objeto sólido, pero suele ocurrir más a menudo con los planos. El usuario normalmente se da cuenta cuando
ha puesto la cámara dentro de una caja o esfera, pero el interior de un
plano es un concepto inusual. En general, puedes invertir el
interior/exterior de un objeto con el modificador inverse
.
Mira las secciones "Inverse" y
"Objetos sólidos y huecos"
para conocer más detalles.
El plano es una forma polinómica ya que se define como una ecuación polinómica de primer orden. Dado el plano:
plane { <A, B, C>, D }
éste puede representarse mediante la ecuación A*x + B*y +
C*z - D*sqrt(A^2 + B^2 + C^2) = 0
.
Así, nuestro ejemplo plane{y,4}
es realmente la
ecuación polinómica y=4. Puedes imaginarlo como el conjunto de puntos
del espacio para los que el valor de y es 4, sin importar los valores
de x o z.
Esta ecuación es un polinomio de primer orden ya que cada término contiene sólo potencias de 1 de x, y o z. Una ecuación de segundo orden tiene términos como x x^2, y^2, z^2, xy, xz o yz. Otro nombre de las ecuaciones de segundo orden es "ecuación cuádrica". Las de tercer orden son "cúbicas", y las de cuarto orden "cuadráticas". Dichas formas se describen en las siguientes secciones.
Pueden definirse superficies polinómicas de mayor orden usando la
forma poly
. Su sintaxis es la siguiente:
POLY: poly { Orden, <A1, A2, A3,... An> [MODIFICADORES_POLINOMICOS...] } MODIFICADORES_POLINOMICOS: sturm | MODIFICADOR_DE_OBJETO
sturm : off
donde Orden
es un entero de 2 a 7 inclusive,
que especifica el orden de la ecuación. A1, A2, ... An
son los valores de coma flotante de los coeficientes de la ecuación.
Existen n
términos donde n =
((Orden+1)*(Orden+2)*(Orden+3))/6.
El objeto cubic
es una manera alternativa de
especificar polinomios de 3er orden. Su sintaxis es:
CUBIC: cubic { <A1, A2, A3,... A20> [MODIFICADORES_POLINOMICOS...] }
También existe el objeto quartic
para especificar
ecuaciones polinómicas de cuarto orden. Su sintaxis es:
QUARTIC: quartic { <A1, A2, A3,... A35> [MODIFICADORES_POLINOMICOS...] }
La siguiente tabla muestra los factores x,y,z y sus términos
polinómicos correspondientes. Recuerda que cubic
es
realmente un polinomio de 3er orden y quartic
de cuarto
orden.
2º | 3º | 4º | 5º | 6º | 7º | 5º | 6º | 7º | 6º | 7º | |||||
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 |
Las formas polinómicas pueden usarse para describir un amplia gama
de formas, incluyendo el toroide, lemniscata, etc.
Declarar una superficie cuártica requiere que cada uno de los
coeficientes (A1 ... A35
) se coloquen ordenados
en un único y largo vector de 35 términos. Como ejemplo, definamos un
toroide de la forma mas bruta. Un toroide puede representarse por la
ecuación
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
donde r_0
es el radio mayor del toroide (la distancia
desde el agujero del donut hasta el centro del anillo del toroide), y r_1
es el radio menor del toroide (la distancia desde el centro del anillo
hasta el borde de la superficie exterior). La siguiente declaración de
objeto define un toroide con un radio mayor de 6.3 y un radio menor de
3.5 (haciendo que la anchura máxima sea casi 20).
// Toroide con radio mayor = sqrt(40) y radio menor = 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 }
Los objetos poly
, cubic
y quartic
se parecen al objeto quadric
en el hecho de que tampoco
requieren que los entiendas para poder usarlos. El archivo shapesq.inc
contiene muchas cuárticas predefinidas para que juegues con ellas.
El objeto poly
usa cálculos altamente complejos, y no
siempre renderiza perfectamente. Si la superficie no es suave, tiene
agujeros o píxeles aleatoriamente coloreados, prueba a usar el
modificador sturm
en la definición del objeto. Trazará más
lentamente, pero se usará un método de cálculo más preciso. Normalmente
el problema desaparecerá, pero no siempre. Si sturm
no
funciona, prueba a rotar o trasladar un poco el objeto.
Existe tal variedad de formas polinómicas, que nos sería imposible enumerarlas todas, y mucho menos describirlas. Te sugerimos que busques documentación adicional en Internet o libros de texto si deseas profundizar más en el tema.
El objeto quadric
puede producir formas tales como
paraboloides (forma de cuenco) y hiperboloides (forma de reloj de
arena). También puede producir elipsoides, esferas, conos y cilindros,
pero para estas formas es preferible usar los objetos predefinidos de
POV-Ray como sphere
, cone
, y cylinder
,
ya que trazan más rápido que las cuádricas.
Nota: no confundas las "cuádricas" con las "cuárticas": las primeras son polinomios de segundo orden, mientras que las últimas son de cuarto orden.
Frente a otras polinómicas, las cuádricas trazan mucho más rápido y son menos proclives al error, pero producen objetos de menor complejidad. Su sintaxis es la siguiente:
QUADRIC: quadric { <A,B,C>,<D,E,F>,<G,H,I>,J [MODIFICADORES_DE_OBJETO...] }
Aunque la sintaxis realmente espera 3 vectores seguidos de un valor
de coma flotante, tradicionalmente escribimos la sintaxis como 10
valores de coma flotante, ya que estos diez valores definen una
superficie de puntos x,y,z que satisfacen la ecuación A x2
+ B y2 + C z2 + D xy + E xz + F yz + G x + H y + I z
+ J = 0
Diferentes valores de A, B, C, ... J
darán
formas diferentes. Si coges cualquier punto tridimensional y usas sus
coordenadas x,y,z en la ecuación anterior, el resultado será 0 si el
punto está en la superficie del objeto. Si el resultado es negativo,
entonces el punto está dentro del objeto, mientras que si es positivo
se encuentra en el exterior del objeto. Veamos algunos ejemplos:
X2 + Y2 + Z2 - 1 = 0 |
Esfera |
X2 + Y2 - 1 = 0 |
Cilindro infinito a lo largo del eje Z |
X2 + Y2 - Z2 = 0 |
Cono infinito a lo largo del eje Z |
La manera más sencilla de usar estas formas es incluir el archivo de
inclusión estándar shapes.inc
en tu escena. Este archivo
contiene distintas cuádricas predefinidas que puedes transformar
(trasladar, rotar y escalar). Para ver la lista completa, edita el
archivo shapes.inc
.
|