martes, 17 de abril de 2012


¿Como se grafica un circulo y una elipse?

Debido a que la elipse y la circunferencia son figuras simétricas el algoritmo genera los vértices del primer cuadrante solamente. Los vértices del segundo cuadrante se crean aplicando simetría axial respecto a los vértices del primer cuadrante, los vértices del tercer cuadrante con respecto a los del segundo y los vértices del cuarto cuadrante con respecto a los del tercero.

Las ecuaciones utilizadas son las paramétricas polares


Como la circunferencia es un caso particular de la elipse (cuando radioX = radioY) a partir de este momento hablaremos solamente de la elipse.

Este algoritmo consiste en dividir la elipse en cuatro partes iguales y a cada una agregarle la cantidad de vértices (pasos) que se indiquen. El punto de partida es crear cuatro vértices los cuales están situado en los ejes del plano XY a la distancia del radio correspondiente al eje, partiendo siempre del origen de coordenadas, por lo que la elipse siempre se crea en el origen de coordenadas y en el plano XY. Si se desea desplazar del origen de coordenadas entonces hay que aplicarle una transformación a cada vértice[1].

En la figura 1 se muestra una elipse con cero pasos.


Fig 1. El cuadrado amarillo formado por los cuatro vértices es la elipse formada cuando la cantidad de pasos es cero. La elipse rosada es otra que tiene el mismo radio pero usando un método adaptativo, esta se muestra como referencia solamente.

Si la cantidad de pasos es uno entonces se divide 90º / 2 y este va a ser el ángulo del vértice agregado en el primer cuadrante. Una vez obtenido el ángulo se evalúan las ecuaciones para ese ángulo y la posición obtenida es la del vértice nuevo. En el resto de los cuadrantes se calcula la posición del vértice a través de simetría para evitar los cálculos. Este caso puede observarse en la figura 2.

Fig 2. El polígono amarillo es el obtenido cuando la cantidad de pasos es uno. La elipse rosada tiene el mismo radio pero usando un método adaptativo, esta se muestra como referencia solamente.

Pseudocódigo

Entradas

float radioX
float radioY
byte s // Cantidad de pasos

Salidas

La lista de vértices y las coordenadas de textura de cada vértice

A continuación aparece el pseudocódigo utilizado por el algoritmo:

Crear una lista de vértices (vacía)
Agregar a la lista el vértice para el ángulo cero que está situado en la coordenada (radioX, 0, 0)
Si la cantidad de pasos es cero Entonces
Agregar los tres vértices restantes (ver fig 1):
o    (0, radioY, 0)
o    (-radioX, 0, 0)
o    (0, -radioY, 0)
Si no Entonces
Crear una constante
para el incremento del ángulo de rotación donde s es la cantidad de pasos.
Crear una variable aa que indica el valor del ángulo de rotación actual
Mientras aa sea menor que 90º
Calcular la posición del nuevo vértice usando como ángulo aa
Agregar el nuevo vértice a la lista de vértices
Fin mientras
// En este momento ya se han calculado todos los vértices del primer cuadrante.
Agregar el vértice que está situado en el eje Y positivo (0, radioY, 0)
Agregar los vértices del segundo cuadrante utilizando simetría axial.
Agregar el vértice que está situado en el eje X negativo (-radioX, 0, 0)
Agregar los vértices del tercer cuadrante utilizando simetría axial.
Agregar el vértice que está situado en el eje Y negativo (0, -radioY, 0)
Agregar los vértices del tercer cuadrante utilizando simetría axial.
Fin si

Generar las coordenadas de textura (ver código fuente de ejemplo)

Nota: La cantidad de pasos oscila en el rango 0..255, pero en la práctica con 100 es suficiente. GMax y 3DS MAX usan 6 pasos por defecto.

No hay comentarios:

Publicar un comentario