Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Circunferencia Opengl

Estas en el tema de Circunferencia Opengl en el foro de C/C++ en Foros del Web. Hola, me gustaria dibujar una circunferencia en opengl. La ciircunferencia, le pongo yo las coordenadas. Gracias....
  #1 (permalink)  
Antiguo 25/10/2006, 13:14
 
Fecha de Ingreso: enero-2004
Mensajes: 75
Antigüedad: 20 años, 3 meses
Puntos: 0
Circunferencia Opengl

Hola,
me gustaria dibujar una circunferencia en opengl.
La ciircunferencia, le pongo yo las coordenadas.
Gracias.
__________________
Gracias y un saludo
  #2 (permalink)  
Antiguo 26/10/2006, 15:40
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Pues no se si opengl tenga funciones para el dibujadod e primitivas.
En caso de que no, usa un poco de geometria analitica
x^2+y^2=25

Al parecer es una circuferencia de radio 5.
Para indicarle las coordenadas, creo que hay que sumarleselas, pero no recuerdo como.

Saludos
  #3 (permalink)  
Antiguo 27/10/2006, 06:49
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
(x-x0)^2+(y-y0)^2=r^2
  #4 (permalink)  
Antiguo 27/10/2006, 15:15
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Asi es max aunque yo lo manejo con otras letras nadamas jajajaja.

saludos
  #5 (permalink)  
Antiguo 28/10/2006, 04:38
 
Fecha de Ingreso: enero-2004
Mensajes: 75
Antigüedad: 20 años, 3 meses
Puntos: 0
pero en la cabecera le tendre que poner algo como por ejemplo.

Código HTML:
glBegin(GL_POINTS);
//codigo para dibujar circunferencia
glEnd();
__________________
Gracias y un saludo
  #6 (permalink)  
Antiguo 28/10/2006, 04:54
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por david1981 Ver Mensaje
pero en la cabecera le tendre que poner algo como por ejemplo.

Código HTML:
glBegin(GL_POINTS);
//codigo para dibujar circunferencia
glEnd();
¿Qué cabecera?

Tendrás que poner el código para dibujar cada punto en la posición dada por la ecuación (x-x0)^2+(y-y0)^2=r^2, siendo (x0,y0) el centro de la circunferencia deseado y r el radio.

¿Cuál es el problema? Sólo tienes que deducir y(x) con algo como:

double y(double x) { return ...; }

Para luego pintar cada punto en (x, y(x))

Son matemáticas básicas...
  #7 (permalink)  
Antiguo 28/10/2006, 09:38
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
En resumen, debes "descubrir" una forma de pintar un pixel ya sea en 2D o en 3D.
Despues con tu funcion para pintar pixeles usas la formula de la circunferencia y listo.

Saludos
  #8 (permalink)  
Antiguo 28/10/2006, 10:22
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Hola david1981

Instru ya te mencionó la manera de hacerlo.

Por otro lado a mí en lo personal me resulta mas práctico utilizar funciones paramétricas (cuando aplica). En el caso de la circunferencia:


f(α) = ( x + r * Cos(α), y + r * Sen(α)) donde α Є [0, 2π] y r>0

es una circunferencia de radio r y centro en (x, y).


Si no te queda muy claro el uso de radianes lo puedes ver en grados como sigue:

f(α) = ( x + r * Cos( (π / 180) * α) , y + r * Sen( (π / 180) * α)) donde α Є [0, 360] y r >0

si evaluas esta función para un numero α que va de 0 a 360 obtienes los puntos que representan a la circunferencia con centro (x,y) y radio r.


Solo recuerda que π = 3.14159265...

La función esta dada, ahora solo resta implementarla.

Como ya mencionó MaxExtreme son matemáticas básicas y siempre es bueno saber de Geometria Analítica, sobre todo cuando se trate de librerias gráficas.

Salu2ks
  #9 (permalink)  
Antiguo 28/10/2006, 11:19
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
bueno, en mi opinion se me hace mas practico usar una ecuacion analitica en vez de una funcion, pero cada quien sus gustos.

Saludos
  #10 (permalink)  
Antiguo 28/10/2006, 13:35
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru Ver Mensaje
bueno, en mi opinion se me hace mas practico usar una ecuacion analitica en vez de una funcion, pero cada quien sus gustos.

Saludos
Instru, lo tuyo también es una función cuando despejas una de las variables:

f(x) = y(x) = sqrt(r^2 - (x-x0)^2) + y0

Con función paramétrica se refiere a una función la cual sus valores vienen dados por separado, en ecuaciones distintas, determinados por un parámetro común, es decir:

x = r * cos(α) + x0
y = r * sen(α) + y0

Dando valores a α obtienes el valor respectivo de cada variable (x,y) por separado. Eso es una función paramétrica. La manera de representarla en C sería algo así:

double x(double a) { return r * cos(a) + x0; }
double y(double a) { return r * sin(a) + y0; }

La tuya, sería

double y(double x) { return sqrt(r * r - (x - x0) * (x - x0)) + y0; }

La única diferencia estaría en que con paramétricas daríamos valores de 0 a 2π:

for(a = 0; a < 2*pi; a++) point(x(a), y(a));

Y con la tuya dando valores a x dentro del rango que quisises:

for(x = x0 - r; x < x0 + r; x++) point(x, y(x));

¿Ventajas de la paramétrica? Que no tienes que preocuparte del rango, con ir de 0 a 2π obtendrás todos los puntos con la precisión que desees. En cambio, con la x tendrías que tener cuidado con el rango, o dibujarlo para toda la pantalla. Date cuenta de que si coges una x que no se encuentre en el rango de la circunferencia (x0 - r, x0 + r), aparece una raíz de un número negativo. Es decir, sqrt() en C te devolvería un double que no existiría, y podrías estar dibujando cosas que no deben aparecer.

Última edición por MaxExtreme; 28/10/2006 a las 13:45
  #11 (permalink)  
Antiguo 28/10/2006, 20:48
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
si si max, al despejar la ecuacion se representa en forma de funcion.

Pero sigue siendo diferente la forma de representarla en C.
Una funcion es una funcion y una encuacion.....pues una ecuacion.

Dos ciclos fors te dibujan la circunferencia en donde quieras, con las funciones, pues ya tienes la manera de implementarlas.

No se, para mi son cosas representadas en diferentes maneras.

Saludos
  #12 (permalink)  
Antiguo 29/10/2006, 03:25
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Instru Ver Mensaje
Una funcion es una funcion y una encuacion.....pues una ecuacion.
No sé qué diferencia hay en C, es decir, una función C se llama así precisamente porque se asemeja a una función matemática: tomas unos parámetros, devuelves un valor, hasta la forma de escribirlas es la misma: printf(x), y(x)...
  #13 (permalink)  
Antiguo 29/10/2006, 10:45
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Vamos eso ya lo se, yo hablo de lo matematico.
Y la implementacion en C.

Saludos
  #14 (permalink)  
Antiguo 06/11/2006, 11:03
Usuario no validado
 
Fecha de Ingreso: julio-2001
Mensajes: 766
Antigüedad: 22 años, 9 meses
Puntos: 0
Código PHP:

#define Frac_Circ 100  // Cien fracciones de circulo
#define PI 3.1415926535897932

glBegin(GL_POLYGON);
     for (
int i 0Frac_Circ 1i++) {  // +1 para cerrar
         
glVertex2fcirc->circ->cos(2.0 PI Frac_Circ),
                
circ->circ->sin(2.0 PI Frac_Circ) );
    }
glEnd(); 
circ->x Coordenada en X
circ->y Coordenada en Y
circ->r Radio del circulo
Variables Del tipo GLfloat o lo que necesites en este caso era una lista enlazada
Notese las definiciones: Frac_Circ = numero de rectas que conforman el circulo > Frac_Circ = < Rendimiento

y por supuesto ya debe estar inicializado el OpenGL y listo para dibujar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 06:00.