Página principal | Jerarquía de la clase | Lista alfabética | Lista de componentes | Lista de archivos | Miembros de las clases | Archivos de los miembros | Páginas relacionadas

Referencia de la Clase ESFERA

#include <esfera.h>

Diagrama de herencias de ESFERA

Inheritance graph
[leyenda]
Diagrama de colaboración para ESFERA:

Collaboration graph
[leyenda]
Lista de todos los miembros.

Métodos públicos

 ESFERA (double r)
 Constructora por defecto de la clase ESFERA.

virtual ~ESFERA ()
 Destructora de la clase ESFERA.

double interseccion (RAYO *Rayo, VECTOR &punto, VECTOR &normal)
 Implementación de la operación geométrica básica de intersección de un `RAYO` con una `GEOMETRIA`.

double radio (void)
 Retorna el radio de la ESFERA `*this`.

void set_radio (double r)
 Permite al usuario especificar un nuevo radio para la ESFERA `*this`, siempre y cuando sea positivo y mayor a EPSILON.

void set_lod (unsigned long int lod)
 Si `lod` es un número mayor o igual a 1, se configura la esfera para que cuando se represente en polígonos de caras planas, se genere un numero de triángulos igual o levemente superior a lod.

void anexar_textura (IMAGEN *img)
 Agrega a la ESFERA `*this` una IMAGEN.

int clasificar_punto (VECTOR p)
 Dado un punto, se retorna: - -1: si el punto esta fuera de esta geometria - 0: si el punto esta en la superficie (frontera) de la geometria - 1: si el punto esta dentro de la geometria.

virtual GEOMETRIAcrear_copia (void)
 Se crea una segunda ESFERA en su propio contexto de memoria, y se copia de tal manera que el valor de retorno contiene la misma información que `*this`.

void minmax (VECTOR *min, VECTOR *max)
void pintar_gl (CALIDAD_VISUAL *Calidad, MATERIAL *Material, CAMARA *Camara)
 Este método genera las primitivas OpenGL necesarias para construir una representación poligonal de la esfera actual, teniendo en cuenta su actual configuración `_lod`.

void pintar_povray (FILE *fd)
 Este método genera una representación de la esfera actual en formato POVRAY, y lo anexa a un archivo `*fd`, que debe estar abierto en modo de escritura de texto.

void pintar_aqz (FILE *fd)
 Este método genera una representación de la esfera actual en formato AQUYNZA, y lo anexa a un archivo `*fd`, que debe estar abierto en modo de escritura de texto.


Métodos privados

void activar_lod (void)
 Este método calcula el número de `_paralelos` y `_meridianos` más adecuado para resultar en un nivel de detalle de `_lod` triangulos.


Atributos privados

double _radio
unsigned long int _lod
int _paralelos
int _meridianos
GLUquadricObj * Textura_glu
IMAGENimagen

Documentación del constructor y destructor

ESFERA::ESFERA double  r  ) 
 

Constructora por defecto de la clase ESFERA.

ATENCIÓN: inicializa los valores `_lod`, `_paralelos` y `_meridianos` de manera arbitraria. Podría esto hacerce mejor si se usaran parámetros con valores por defecto?

Definición en la línea 34 del archivo esfera.C.

References _lod, _meridianos, _paralelos, _radio, imagen, y Textura_glu.

Referenciado por crear_copia().

ESFERA::~ESFERA  )  [virtual]
 

Destructora de la clase ESFERA.

Nótese que si se había asignado una imagen a este objeto, la imagen es destruida.

Definición en la línea 54 del archivo esfera.C.

References imagen, y Textura_glu.


Documentación de las funciones miembro

void ESFERA::activar_lod void   )  [private]
 

Este método calcula el número de `_paralelos` y `_meridianos` más adecuado para resultar en un nivel de detalle de `_lod` triangulos.

En este momento, el algoritmo es muy sencillo, y puede mejorarse.

Definición en la línea 99 del archivo esfera.C.

References _lod, _meridianos, y _paralelos.

Referenciado por set_lod().

void ESFERA::anexar_textura IMAGEN img  )  [virtual]
 

Agrega a la ESFERA `*this` una IMAGEN.

Nótese que se considera que en adelante la imagen será agregada a la esfera, por lo que debe existir una imagen diferente para cada esfera. ESTE COMPORTAMIENTO DEBE REVISARSE, ES INEFICIENTE!

Implements PRIMITIVA_GEOMETRICA.

Definición en la línea 139 del archivo esfera.C.

References imagen.

int ESFERA::clasificar_punto VECTOR  p  )  [virtual]
 

Dado un punto, se retorna: - -1: si el punto esta fuera de esta geometria - 0: si el punto esta en la superficie (frontera) de la geometria - 1: si el punto esta dentro de la geometria.

Implements PRIMITIVA_GEOMETRICA.

Definición en la línea 152 del archivo esfera.C.

References _radio, VECTOR::x, VECTOR::y, y VECTOR::z.

GEOMETRIA * ESFERA::crear_copia void   )  [virtual]
 

Se crea una segunda ESFERA en su propio contexto de memoria, y se copia de tal manera que el valor de retorno contiene la misma información que `*this`.

Implements PRIMITIVA_GEOMETRICA.

Definición en la línea 291 del archivo esfera.C.

References _radio, IMAGEN::copie(), ESFERA(), imagen, y Textura_glu.

Here is the call graph for this function:

double ESFERA::interseccion RAYO Rayo,
VECTOR punto,
VECTOR normal
[inline, virtual]
 

Implementación de la operación geométrica básica de intersección de un `RAYO` con una `GEOMETRIA`.

Especificación de parámetros de entrada:

  • El RAYO `*Rayo` representa una semirecta infinita con origen en el punto `Rayo->origen`, que se extiende en dirección `Rayo->direccion`.
  • La ESFERA `*this` es una esfera de radio `this->_radio` ubicada en el origen y con una orientación por defecto cuya matriz de rotación equivale a la matriz de identidad. Nótese que para calcular la intersección entre un RAYO y una ESFERA cuya posición u orientación no corresponde a la aquí indicada, el código usuario de éste método debe modificar los parámetros de entrada y de salida mediante transformaciones geométricas y sus inversas respectivamente.

Precondición:

\[ \mathbf{Q} := Rayo->destino.norma() = 1 \; \land \; \_radio > \varepsilon \]

Especificación de parámetros de salida:

  • El valor de retorno (`double`) es el valor 0.0 si el RAYO `*Rayo` y la esfera no se intersectan, y es un valor positivo mayor a `EPSILON` si se intersectan, que corresponde a la distancia entre el centro del RAYO `Rayo->origen` y el punto `punto`, en donde el RAYO y la ESFERA `*this` se encuentran. Nótese que para los casos en los que el RAYO y la ESFERA se intersectan en dos puntos (i.e. cuando la solución a la ecuación cuadrática tiene dos raíces para $t$ ), la distancia retornada corresponde al punto más cercano a `Rayo->origen`.
  • `punto` contiene las coordenadas en el espacio 3D del punto en donde el RAYO `*Rayo` y la ESFERA `*this` se intersectan. Si no se intersectan, el valor del parámetro `punto` no se modifica.
  • `normal` es el VECTOR normal a la superficie de la ESFERA en el punto `punto`, si es que el RAYO `*Rayo` y la ESFERA `*this` se intersectan. Si no se intersectan, el valor del parámetro `normal` no se modifica. Nótese que el vector normal calculado por éste método es un vector que apunta hacia afuera de la ESFERA si `Rayo->origen` es un punto fuera de la ESFERA.

Ésta función de intersección de esfera está basada en la sustitución de la ecuación paramétrica 3D de la línea constituída por el conjunto de puntos $(x, y, z)$ tales que

\[ \left[ \begin{array}{c} x \\ y \\ z \end{array} \right] = \left[ \begin{array}{c} Rayo->origen.x + t*Rayo->direccion.x \\ Rayo->origen.y + t*Rayo->direccion.y \\ Rayo->origen.z + t*Rayo->direccion.z \end{array} \right] \]

en la fórmula de la superficie de una esfera, cuyos puntos $(x, y, z)$ se caracterizan por la fórmula

\[ x^2 + y^2 + z^2 - \_radio^2 = 0 \]

Postcondición: Si se calcula n:

\[ \mathbf{Q} := normal.norma() = 1 \]

Bugs y pendientes:

  • La dirección del vector `normal` no se ha especificado para los casos en que el punto `Rayo->origen` está dentro de la esfera o en la superficie de la misma. Por ahora, si el rayo se inicia dentro de la esfera, la normal retornada apunta hacia AFUERA de la esfera.

Es una versión adaptada del proyecto "htrace" de Hernando Barragan (Universidad de los Andes, 1997).

Reimplementado de GEOMETRIA_3D.

Definición en la línea 77 del archivo esfera.h.

References _radio, RAYO::direccion, VECTOR::normalizar(), RAYO::origen, VECTOR::x, VECTOR::y, y VECTOR::z.

Here is the call graph for this function:

void ESFERA::minmax VECTOR min,
VECTOR max
[virtual]
 

Reimplementado de GEOMETRIA.

Definición en la línea 175 del archivo esfera.C.

References _radio, VECTOR::x, VECTOR::y, y VECTOR::z.

void ESFERA::pintar_aqz FILE *  fd  )  [virtual]
 

Este método genera una representación de la esfera actual en formato AQUYNZA, y lo anexa a un archivo `*fd`, que debe estar abierto en modo de escritura de texto.

Implements PRIMITIVA_GEOMETRICA.

Definición en la línea 276 del archivo esfera.C.

References _radio, y simplifique_real().

Here is the call graph for this function:

void ESFERA::pintar_gl CALIDAD_VISUAL Calidad,
MATERIAL Material,
CAMARA Camara
[virtual]
 

Este método genera las primitivas OpenGL necesarias para construir una representación poligonal de la esfera actual, teniendo en cuenta su actual configuración `_lod`.

Implements PRIMITIVA_GEOMETRICA.

Definición en la línea 190 del archivo esfera.C.

References _meridianos, _paralelos, _radio, CALIDAD_VISUAL::activar_bordes_gl(), CALIDAD_VISUAL::activar_caras_gl(), IMAGEN::activar_gl(), MATERIAL::activar_gl(), CALIDAD_VISUAL::activar_textura_gl(), CALIDAD_VISUAL::calidad_caras, CALIDAD_VISUAL::con_bordes, CALIDAD_VISUAL::con_cajas, CALIDAD_VISUAL::con_caras, CALIDAD_VISUAL::con_caustics, CALIDAD_VISUAL::con_textura, CVC_CONSTANTE, CVC_FLAT, CVC_SHADE, GLenum, imagen, y Textura_glu.

Referenciado por MESH::pintar_debug_vertice().

Here is the call graph for this function:

void ESFERA::pintar_povray FILE *  fd  )  [virtual]
 

Este método genera una representación de la esfera actual en formato POVRAY, y lo anexa a un archivo `*fd`, que debe estar abierto en modo de escritura de texto.

Implements PRIMITIVA_GEOMETRICA.

Definición en la línea 261 del archivo esfera.C.

References _radio.

double ESFERA::radio void   ) 
 

Retorna el radio de la ESFERA `*this`.

Postcondición:

\[ \mathbf{R} := \_radio > 0 \]

Definición en la línea 67 del archivo esfera.C.

References _radio.

void ESFERA::set_lod unsigned long int  lod  ) 
 

Si `lod` es un número mayor o igual a 1, se configura la esfera para que cuando se represente en polígonos de caras planas, se genere un numero de triángulos igual o levemente superior a lod.

Si lod es 0, el cálculo se realizará de manera automática dependiendo del porcentaje de ocupación del viewport para la camara de visualizacion.

Definición en la línea 124 del archivo esfera.C.

References _lod, y activar_lod().

Here is the call graph for this function:

void ESFERA::set_radio double  r  ) 
 

Permite al usuario especificar un nuevo radio para la ESFERA `*this`, siempre y cuando sea positivo y mayor a EPSILON.

Precondición:

\[ \mathbf{Q} := \_radio > \varepsilon \]

Definición en la línea 82 del archivo esfera.C.

References _radio.


Documentación de los datos miembro

unsigned long int ESFERA::_lod [private]
 

Definición en la línea 38 del archivo esfera.h.

Referenciado por activar_lod(), ESFERA(), y set_lod().

int ESFERA::_meridianos [private]
 

Definición en la línea 40 del archivo esfera.h.

Referenciado por activar_lod(), ESFERA(), y pintar_gl().

int ESFERA::_paralelos [private]
 

Definición en la línea 39 del archivo esfera.h.

Referenciado por activar_lod(), ESFERA(), y pintar_gl().

double ESFERA::_radio [private]
 

Definición en la línea 37 del archivo esfera.h.

Referenciado por clasificar_punto(), crear_copia(), ESFERA(), interseccion(), minmax(), pintar_aqz(), pintar_gl(), pintar_povray(), radio(), y set_radio().

IMAGEN* ESFERA::imagen [private]
 

Definición en la línea 44 del archivo esfera.h.

Referenciado por anexar_textura(), crear_copia(), ESFERA(), pintar_gl(), y ~ESFERA().

GLUquadricObj* ESFERA::Textura_glu [private]
 

Definición en la línea 42 del archivo esfera.h.

Referenciado por crear_copia(), ESFERA(), pintar_gl(), y ~ESFERA().


La documentación para esta clase fué generada a partir de los siguientes archivos:
Este archivo HTML ha sido generado automáticamente a partir del código fuente AQUYNZA. NO LO EDITE. Para mayor información contacte al autor.