Betanzo Vásquez Erick Manuel. Tarea # 1.
Computación Gráfica.
Ejemplos matemáticos:
Sean los vectores a = (4, -2, 3) y b = (3, 2, 1), y sean las operaciones siguientes: Producto punto
(
4, 2, 3) (
3, 2,1) ( ) (
4 3 2 2) ( )
3 1 12 ( 4) 3 11 a b a b = − = ⋅ + − ⋅ + ⋅ = + − + = i i i Producto cruz 4 2 3 8 5 14 ( 8, 5,14) 3 2 1 i j k a b× = − = − +i j+ k = −Proyección de un vector sobre otro
(
) (
)
(
)
(
) (
)
2 2 2 2 2 2 4, 2, 3 3, 2,1 3, 2,1 3 2 1 3 2 1 3, 2,1 33, 22,11 11 14 14 14 b b a b b Comp vect a b b Comp vect a − = = + + + + = = i iLa proyección escalar del vector a sobre el vector b corresponde al valor de 11
14
mientras que la proyección vectorial es:
(
33, 22,11)
14
Líneas y rayos
Para determinar una ecuación de una recta se necesitan como datos las coordenadas de un punto de ella, o el vector de posición de dicho punto; y un vector que indique la dirección de la recta, que se conoce como vector director.
Pertenencia y Distancia de Punto a Recta y Plano
La distancia entre dos objetos es la menor de entre las distancias de sus puntos. De un punto a un plano o a una recta es la distancia al pie de la perpendicular del punto al plano o recta.
En el caso de la recta, notemos que el triangulo que forma el punto P con el segmento P0-P1 tiene altura d, que es la distancia buscada. En el caso del plano sucede lo mismo con el volumen del tetraedro formado por el punto y el triangulo. El área del triangulo es la mitad del área del paralelogramo que se forma con dos vectores y se calcula mediante el producto vectorial. El volumen del tetraedro es un sexto del paralelepípedo formado con tres vectores y se calcula mediante el triple producto escalar. La distancia se puede calcular entonces mediante área o volumen dividido base:
Si el resultado es nulo, el punto pertenece a la recta o al plano.
La primera ecuación da un vector normal al plano definido por la recta y el punto. En la segunda, para el plano, el signo del resultado indica de que lado del plano esta el punto. En ambos casos, si la información extra resulta inútil, bastara con tomar el modulo.
Aplicaciones para computación gráfica en OpenGL. Vectores
Modulo de un vector
Si x, y, z son las componentes del vector A se define como modulo a |A| = sqrt(x*x + y*y + z*z).
//modulo de un vector
GLfloat Modulo(GLfloat x, GLfloat y, GLfloat z) { GLfloat len; len = x*x + y*y + z*z; return ( sqrt(len)); } Vector Normalizado
Se llama haci al vector que tiene como modulo a 1. //Vector de mudulo 1 o Normalizado
GLvoid Normaliza(GLfloat *x, GLfloat *y, GLfloat *z) {
GLfloat len;
len = Modulo(*x, *y, *z); len = 1.0/len;
(*x) *= len; (*y) *= len; (*z) *= len; }
Producto Escalar
Se llama producto escalar de dos vectores A, B al escalar obtenido como producto de los modulos de A y B por el coseno del angulo formado por los dos vectores.
A.B = |A|*|B|*cos(rho)
tambien se lo puede expresar mediante sus componentes A.B = a1*b1 + a2*b2 + a3*b3
//Producto Escalar
GLfloat ProductoEscalar(GLfloat A[], GLfloat B[]) {
return (A[0]*B[0] + A[1]*B[1] + A[2]*B[2]); }
Producto Vectorial
Se llama producto vectorial de dos vectores A y B al vector C que tiene
el modulo igual al producro de los modulos de A y B por el seno del angulo que lo forman, AxB = |A|*|B|*sin(rho)
la direccion perpendicular al plano determminado por las direcciones de los vectores A, B. el sentido tal que el triedro A, B, C tenga la misma orientacion en el espacio.
Lo podemos expresar tambien por sus coponentes A(a1,a2,a3) , B(b1,b2,b3), C(c1,c2,c3). C=AxB
c1 = a2*b3 - a3*b2 c2 = a3*b1 - a1*b3 c3 = a1*b2 - a2*b1 //Producto Vectorial
GLvoid ProductoVectorial(GLfloat A[], GLfloat B[], GLfloat *C1, GLfloat *C2, GLfloat *C3) { *C1 = A[1]*B[2] - A[2]*B[1]; *C2 = A[2]*B[0] - A[0]*B[2]; *C3 = A[0]*B[1] - A[1]*B[0]; }
El sistema de coordenadas Esfericas se puede definir utilizando las siguientes variables r, rho, theta, donde rho se mide desde el eje Z y theta desde el eje X.
Las relaciones entre r, rho, theta y x, y, z son las siguientes: x=r*sin(rho)*cos(theta) y=r*sin(rho)*sin(theta) z=r*cos(rho) donde r=(x2+y2+z2)1/2. Ejemplo en C
Ejemplo en OpenGL del uso de las coordenadas esfericas para dibujar los puntos de una esfera de radio 1.
Codigo Fuente#include <GL/glut.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #definePI 3.141592654 void DibujarEjes(void) { glBegin(GL_LINES); //eje X glVertex3f(-1.5, 0.0, 0.0); glVertex3f(1.5, 0.0, 0.0); //eje Y glVertex3f(0.0, -1.5, 0.0); glVertex3f(0.0, 1.5, 0.0);
//eje Z glVertex3f(0.0, 0.0, -1.5); glVertex3f(0.0, 0.0, 1.5); glEnd(); } void DibujarEsfera(void) { float x, y, z;
float r=1.0, rho, theta; int i, j; glBegin(GL_POINTS); rho=0.0; x=(float)(r*sin(rho)*cos(theta)); y=(float)(r*sin(rho)*sin(theta)); z=(float)(r*cos(rho)); glVertex3f(x, y, z); for (i=1; i<23; i++) {
rho=PI*i/24; for (j=0; j<16; j++) { theta=2*PI*j/16; x=(float)(r*sin(rho)*cos(theta)); y=(float)(r*sin(rho)*sin(theta)); z=(float)(r*cos(rho)); glVertex3f(x, y, z); } } rho=PI; x=(float)(r*sin(rho)*cos(theta)); y=(float)(r*sin(rho)*sin(theta)); z=(float)(r*cos(rho)); glVertex3f(x, y, z); glEnd(); } void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); gluLookAt(2.0, 2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
//ejes en verde glColor3f (0.0, 1.0, 0.0); DibujarEjes(); //ejes en amarillo glColor3f (1.0, 1.0, 0.0); DibujarEsfera(); glPopMatrix(); glFlush(); }
void reshape(int w, int h) {
if (!h)
return;
glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0, (GLfloat) w/(GLfloat) h, 1.0, 100.0); glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); }
void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } }
int main(int argc, char **argv) { glutInit(&argc, argv); glutInitWindowSize(400, 400); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutCreateWindow("Coordenadas Esfericas"); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }
Bibliografía:
Castañeda de Isla Puga Eric. Geometría Analítica en el Espacio. México, UNAM, Facultad de Ingeniería, 2000, 229 pp.
http://pgrafica.webideas4all.com/
http://www.cimec.org.ar/twiki/pub/Cimec/ComputacionGrafica/Intersecciones.doc.pdf http://www.humbertocervantes.net/homepage/itzamna/TUTORIAL/tutorial.html http://www.humbertocervantes.net/homepage/itzamna/TUTORIAL/tutorial.html