Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Evaluaciones Graficación, IA
Evaluaciones Graficación, IA
Las torres de Hanoi es un juego matemtico ideado en el siglo XVIII. Este juego consiste en pasar 64
discos de dimetro decreciente, de un poste a otro poste, utilizando un tercer poste auxiliar para los pasos
intermedios, tal y como muestra la Figura 1 (en la figura se presenta el juego utilizando 8 piezas).
Cada vez slo se puede mover un disco, los discos siempre deben estar en algn poste y no se puede
colocar un disco sobre otro de menor tamao.
1. Cmo representaras los estados?
2. Cules seran los operadores?
1-. Representacin de los estados:
El estado lo definirn 3 pilas representando los postes, en donde cada pila contiene algunos o todos
los discos.
El estado est definido por los Discos que se encuentran dentro de cada pila y la posicin dentro de
la pila.
D(n,i) n = n de disco ;
i = posicin dentro de la pila
Pk {D(n, 1), D(n-1, 2), , D((n-i)+1),i)} donde 1 k 3 ,1 n 8 y 1 i 8
(Ntese que la posicin ms baja de una pila es 1)
El estado inicial seria para el caso de 8 discos:
P1{D(8, 1), D(7, 2), D(6, 3), D(5, 4), D(4, 5), D(3, 6), D(2, 7), D(1, 8)}
P2{} y P3{}
#include <GL/glut.h>
#include <stdio.h>
#include <stdlib.h>
#define N 20
void cargaMatriz(int matriz[N][N]);
void pared(int x, int y, int r, int g, int b);
void estado(int x, int y, int tX, int tY);
int matriz[N][N];
int inicio[2] = {0,0};// el inicio estar en el origen del laberinto
int salida[2] = {N-1,N-1}; //la salida estar en la esquina que se encuentra en la diagonal
int tx = 0;
int ty = 0;
void display() //Funcion de dibujado
{
int i;
int j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if (matriz[i][j] == 1)
pared(j,i,0,0,0);
else
pared(j,i,1,1,1);
}
}
/**en esta parte deben insertar el estado en el que se encuentran y cuyas coordenadas corresponden
al vector de traslacin
cada vez que se llegue a un nuevo estado valido**/
/**==============================================================**/
estado(inicio[0],inicio[1], tx,ty);/**============================**/
/**==============================================================**/
}
void init()
{
glClearColor(1.0,1.0,1.0,0.0); //Limpiar Pantalla
}
void reshape(int width, int height)
{
glClear(GL_COLOR_BUFFER_BIT); //Buffer
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION); //Genera proyeccion
glLoadIdentity();
glOrtho(0.0,N,0.0,N,-1.0,1.0); //Perspectiva
glMatrixMode(GL_MODELVIEW); //Tipo de Proyeccion
}
{0,0,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0},
{1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,0,0,1,0},
{0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,1,1,0},
{0,1,1,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,0,0},
{0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,0,1,1},
{0,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0},
{0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,0},
{0,1,1,1,1,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0},
{0,0,0,0,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1},
{0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,0,0},
{0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,1,1,1,0}
};
for (i = 0 ; i< N; i ++)
for (j = 0 ; j< N; j ++)
{
matriz[j][i] = matriz1[j][i];
}
}
void pared(int x, int y, int r, int g, int b)
{
glBegin(GL_QUADS); //Modelo a Dibujar
glColor3f(r,g,b);
glVertex3f(x,y,0.0);
glVertex3f(x + 1,y,0.0);
glVertex3f(x + 1,y + 1,0.0);
glVertex3f(x,y + 1,0.0);
glEnd(); //Finaliza el dibujo
}
void estado(int x, int y, int tX, int tY)
{
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glColor3f(1.0,0.0,0.0);
glPointSize(10.0f);
glBegin(GL_POINTS);
glVertex2f(x +0.5 + tX,y + 0.5 +tY);
glEnd();
glTranslatef(tX,tY,0.0f);
glPopMatrix();
}
Problema de Graficacin.
Utilizando las libreras, los algoritmos desarrollados en clase, desarrolla:
Una aplicacin grafica (NO GLUT, OPENGL) que sea capaz de dibujar un polgono regular en el centro
de la pantalla (origen de los ejes cartesianos, para poder manejar coordenadas negativas).
Consideraciones.
Uso del teclado:
Se usarn dos teclas para aumentar o disminuir el nmero de lados del polgono (al iniciar el programa
debe dibujarse por default un tringulo por ser el polgono de menor nmero de lados); selecciona dos
teclas (a tu gusto), una para aumentar el nmero de lados y otra para disminuirlos.
Se usarn cuatro teclas para realizar la traslacin del polgono por toda la pantalla (pueden ser las teclas
de direccin), al presionar la tecla correspondiente a una direccin, sta deber afectar al vector de
traslacin que es aplicado a las coordenadas del polgono, logrando as su traslacin.
Se usarn dos teclas para realizar la rotacin del polgono (a tu gusto), dicha rotacin se har sobre el
centro del polgono no desde el origen de los ejes, tengan cuidado de no perder el centro de la figura al
realizar las operaciones traslaciones.
Se usarn dos teclas para realizar la operacin de escalado (una para el escalado positivo y otra para el
negativo, el factor de escalamiento por cada vez que se presione la tecla puede ser de 0.5 en los dos ejes
para tener un escalado uniforme), OJO utilizar la funcin de escalado que evita el efecto de traslacin,
es decir el escalado tendr como punto de referencia el centro del polgono.
Nota. Todos los procedimientos, dibujado de la lnea, clculo de los vrtices del polgono, clculos
de las transformaciones geomtricas, deben estar programadas en funciones separadas y deben ser
propias. El programa no pedir nada al usuario, al iniciar se presentara un tringulo en el centro
de la pantalla y dependiendo de la tecla que se presione se deber ver el cambio de este
inmediatamente ya sea al modificar sus lados o al aplicarle una transformacin.
Evaluacin: programa corriendo y reporte escrito (pdf).