Académique Documents
Professionnel Documents
Culture Documents
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
Producto cruz
i j k
a × b = 4 −2 3 = −8i + 5 j + 14k = (−8,5,14)
3 2 1
11
14
( 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.
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.
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;
Vector Normalizado
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)
Producto Vectorial
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];
}
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.
#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();
}
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