Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modelado Geométrico
Modelado Geométrico
Facultad de Ingeniera
Computacin Grafica
SEMESTRE 2013-1
24-10-2012
Modelado Geomtrico
Algoritmo para dibujar elipsoide Computacin Grfica
Y una representacin paramtrica ara la elipsoide en trminos del ngulo de latitud () y el ngulo de longitud en la figura es:
Modelado Geomtrico
Algoritmo para dibujar elipsoide Computacin Grfica Se obtiene cuando los coeficientes de los tres trminos cuadrticos presenten igual signo pero valores diferentes. Es importante sealar que adems de esta condicin se hace necesario el estudio del trmino independiente que se realiza despejndolo. Si el trmino independiente es nulo entonces la ecuacin representara un punto en el espacio, en cambio si este es diferente de cero se debe observar que una vez despejado presente el mismo signo que los trminos cuadrticos ya que en caso contrario la ecuacin no representara lugar geomtrico alguno.
//FUNCIN //1) Parmetros de entrada ngulo de latitud () y el ngulo de longitud , radio1, radio2, paralelos y meridianos void elipse(float radio, float radio2,int paralelos, int meridianos, int modoRender) { float ang1, ang2, s1, s2, t1, t2; float a[3], b[3], c[3], d[3]; float delta1, delta2, deltas, deltat; delta1=180.0f/paralelos; delta2=360.0f/meridianos; //2)Clculo de vrtices //Semielipse superior (y positivos) for(int i=0; i < paralelos/2; i++) { for(int j=0; j <= meridianos; j++) { ang1=i*delta1; ang2=j*delta2; a[0]=radio*(float)cos(ang1*PI/180.0f)*(float)cos(ang2*PI/180.0f); a[1]=radio*(float)sin(ang1*PI/180.0f); a[2]=radio2*(float)cos(ang1*PI/180.0f)*(float)sin(ang2*PI/180.0f); ang1=(i+1)*delta1; ang2=j*delta2; b[0]=radio*(float)cos(ang1*PI/180.0f)*(float)cos(ang2*PI/180.0f); b[1]=radio*(float)sin(ang1*PI/180.0f);
Modelado Geomtrico
Algoritmo para dibujar elipsoide Computacin Grfica
b[2]=radio2*(float)cos(ang1*PI/180.0f)*(float)sin(ang2*PI/180.0f); ang1=(i+1)*delta1; ang2=(j+1)*delta2; c[0]=radio*(float)cos(ang1*PI/180.0f)*(float)cos(ang2*PI/180.0f); c[1]=radio*(float)sin(ang1*PI/180.0f); c[2]=radio2*(float)cos(ang1*PI/180.0f)*(float)sin(ang2*PI/180.0f); ang1=i*delta1; ang2=(j+1)*delta2; d[0]=radio*(float)cos(ang1*PI/180.0f)*(float)cos(ang2*PI/180.0f); d[1]=radio*(float)sin(ang1*PI/180.0f); d[2]=radio2*(float)cos(ang1*PI/180.0f)*(float)sin(ang2*PI/180.0f); glColor3f(1.0f,1.0f,1.0f); if(modoRender == 1) glBegin(GL_QUADS);// slido else if(modoRender == 2) glBegin(GL_LINE_LOOP); // 2) Reglas de conectividad: alambrado glVertex3f(a[0], glVertex3f(d[0], glVertex3f(c[0], glVertex3f(b[0], glEnd(); } } } a[1], d[1], c[1], b[1], a[2]); d[2]); c[2]); b[2]);