• Viernes 8 de Noviembre de 2024, 21:37

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - akabane89

Páginas: [1]
1
OpenGL / Re: Laberinto
« en: Sábado 20 de Junio de 2009, 18:10 »
siempre he tenido la idea de que para hacer un mapa donde se respete el no atravesar las paredes, tiene que tener una representación en una matriz de la siguiente manera

x1xxxxxxxxxxxxxxxxxxxxxxx
x111xxxxxxx1xxxx111xxxxxx
x1x111111111xxxxx1xxx111x
x1xxx1xxxx1xxxx1111111xxx
x1xxx111xx1111x1xxxxx1xxx
x11xx1xxxxxxx111xxxxxxxxx
xx1xxxxxxxxxxx11111111xxx
xx1111111111xxxxx1xxx1111
xx1xxxx1xxxxxxxxx1xxxxxxx
x11xxxx1111111xxx111xxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx

donde las x son "paredes", y mientras haces tu recorrido debes reconocer si a donde te diriges hay un 1 o un 0 ( lo he representado en este caso, por una x, pero lo recomendable es hacerlo con 0 y 1)
y bueno, si lo haces graficamente, entonces solo tienes que seguir la regla de tu matriz para el movimiento, eso es todo. ;)

2
Diseño de Algoritmos / Re: programa de calculadora
« en: Sábado 20 de Junio de 2009, 17:41 »
has el algoritmo (una funcion) que verifique que tu cadena de caracteres el cual es la expresion matematica a resolver, esté bien formulada.
lo que te dije es,  si tienes  (A+B)-C esta bien. hay coherencia. pero si tienes
(A-B(-C) esto no tiene coherencia por que se habre un parentesis pero no se cierra.
Tiene que trabajar con parentesis, corchetes, y hasta llaves. Pero lo usual solo son parentesis.
Luego, has un algoritmo, que dada tu cadena coherente. extraiga la subcadena que se encuentra en uno de los parentesis mas internos para poder efectuarlo.
El algoritmo que hagas para ver la coherencia es una pila, donde vas ingresando los elementos parentesis y corchetes que encuentres, y al final, si en la pila no queda ninguno, entonces la cadena es coherente,
Si tienes(5+(3-1)*5 + [2-(2/8) ] )
Bien entonces mientras vas encontrando esos signos los guardas en la pila, y cuando encuentres o ubiques que el opuesto del ultimo ingresado está una casilla anterior, entonces estos se eliminan.
PILA: (     // primera pasada
PILA: ((     // 2 pasada
PILA: (()     // 3 pasada, aqui los ultimos son opuestos y se cierra, en este caso se eliminan, quedandote en tu pila solo el (
PILA: ([      //4 pasada
PILA: ([(     // 5 PASADA
PILA: ([()    // 6 pasada, se eliminan los ultimos
PILA:([]
PILA: ()
PILA: ...     // al final no queda ninguno, esto significa que tu cadena es coherente.
 has la simulación para una cadena no coherente, y veras que el resultado no es vacío, siempre te quedará almenos un elemento dentro de la PILA.

Ahora explico el algoritmo para resolver la cadena coherente. por ejemplo, si tienes
D - ((A+B)/C)    el algoritmo debe guardar en otra cadena de caracteres
la subcadena  A+B. Esto para aplicarle a esta subcadena un algoritmo que transforme los numeros escritos en caracter a enteros y operarlos, obtener un numero entero o real, y convertirlo en un caracter.
Osea basicamente lo que digo es que vamos a usar 2 algoritmos, uno para extraer subcadenas, y otro para resolver esas subcadenas. el caso simulado sería asi.
Ingresas 5+(7*2-(1+2))  el algoritmo de subcadenas ubica el mas interno, entonces tu recorres esta cadena, hasta toparte con una abertura de parentesis que es el que está en este caso antes del 7, pero luego te encuentras con otro parentesis, entonces olvidamos el anterior '(' y ahora pasamos al que esta antes del 1, y encontramos su cerradura ')'. Tenemos que guardar los indices de inicio y fin de parentesis, por que esa subcadena va a desaparecer y ser reemplazado por un numero. ya que la subcadena 1+2 va a ser tratada en otro algoritmo que será solucion de subcadena.
esta funcion va a detectar los operadores de forma prioritaria, osea que como aqui no hay parentesis, solo tenemos + - * /
Si se encuentra una multiplicacion o una division, se cogerán los numeros que tienen al lado ( que son caracteres que se pasarán a enteros o reales) y se operaran, y luego ese resultado entero o real se convierte en caracter.
en este caso como tenemos soolo el signo +. entonces se sabe que se va a sumar los numeros que lo rodean.
se convierten estos caracteres a numeros y se suman
el resultado es 3, ahora este 3 esta en entero, lo pasamos a caracter para guardarlo en la cadena.
hasta aqui has resuelto la subcadena 1+2
pero ahora como te resulta la cadena original? como te dije que guardases los indices entonces ahora vas a hacer una copia, o una modificacion mejor dicho, de este arreglo.
Se tenia 5+(7*2-(1+2)), se guardaron los indices 8 y 12 ( el conteo de indices lo inicio en 1 como algoritmo, no como c++) entonces has una copia de la subcadena del indice 12 para adelante, sin tomar el 12. osea guardas ) que es el ultimo parentesis.
y ahora a partir del indice 8 vas a poner los caracteres que te resultaron, es decir 3.
Ahora te queda hasta el momento asi  5+(7*2-31+2))  y tienes una copia  )
como se empezó el reemplazo del resultado desde el indice 8, 3 chanca el valor del caracter '(', por eso queda como un 31, pero no es 31, es 3 y un 1 a su lado.
ahora en tu recorrido que estas haciendo, como ya pusiste los caracteres de tu resultado. ahora tienes que poner la copia que hiciste, es decir ')'
te queda  5+(7*2-3)+2)), y ahora los valores a partir de donde ya terminaste de copiar para adelante los conviertes o bien en espacios vacíos o en null. eso depende de como funciona tu programa, yo recomiendo null.
entonces tu cadena queda 5+(7*2-3) ahora tienes que aplicar el mismo algoritmo
ubicas la subcadena  en este caso 7*2-3
ahora aplicas el algoritmo, y como encuentras una multiplicacion entonces la ejecutas
al rededor del por esta 7 y 2, los transformas, multiplicas, y tu resultado son 2 caracteres en este caso 14, y esta cadenita tienes que reemplazarla en tu cadena que estas resolviendo.
te queda 14-3 ( ten en cuenta que aqui en el reemplazo de la cadena he hecho el mismo paso que el anterior, ver de donde empieza el reemplazo, donde termino, y chanco los valores que no fueron afectados en la operacion, es decir para este caso los caracteres - y 3. limpiando todo te queda 14-3)
ahora a esta cadena le vuelves a aplicar el algoritmo de operacion. y te queda 11
reemplazas en la cadena anterior y te queda 5 + 11 ( imagina que el numero te quedara negativo, que harías? aqui harías una excepcion por que escribirías 5+-11, y puedes hacer una subfuncion que si encuentra dos signos seguidos como en ese caso, los multiplique, en ese caso se interpreta como una resta) ahora te quedó 5+11
como ya no encuentras parentesis, solo le aplicas el algorítmo de operacion, y listo, obtienes 16.

eso es todo amigo, si necesitas ayuda aun, solo avisa ;)

3
OpenGL / Re: De Perspective a Orthographic Projection
« en: Sábado 13 de Junio de 2009, 07:45 »
glOrtho()
Se utiliza para especificar una proyección ortográfica. Este tipo de proyección define un volumen de vista rectangular, concretamente define un paralelepípedo de tamaño infinito, este hecho nos lleva a definir una serie de planos de corte para detallar con exactitud el volumen de vista. OpenGL define la sentencia como:

glOrtho(xmin, xmax, ymin, ymax, cerca, lejos);

Estos seis argumentos definen la ventana de visualización y los planos de corte tanto cercano como lejano. Para definir la ventana de visualización es suficiente definir las coordenadas de dos esquinas de la ventana, con estos dos valores queda totalmente definida. Los valores de cerca y lejos representan el plano cercano y el plano lejano. Hay que tener en cuenta que el objeto a visualizar debe encontrarse dentro de ambos planos, si sobrepasan estos dos planos el objeto se recortará automáticamente.

ejemplo de valores para glOrtho
glOrtho(-300.0,300.0, -300.0,300.0,-300.0,300.0);

4
OpenGL / Re: Problema GLUT! Help
« en: Sábado 13 de Junio de 2009, 07:37 »
bueno nunca he trabajado con el builder. Pero recuerda que si vas a trabajar en esa plataforma, tienes que ir a la carpeta de includes y agregar las librerias .h que vas a usar: glut.h, opengl.h etc
tambien los .lib que se agregan en la carpeta lib del builder.
despues tienes que linkear en tu proyecto esas librerias asi como lo hacías en los proyectos del visualstudio
es todo lo que supongo es el problema. espero esto te ayude

5
Java 3D / Algun IDE de java 3D
« en: Sábado 13 de Junio de 2009, 07:34 »
Hola, tengo un libro de java 3D, pero el problema es que es foto copiado, y en el libro me enseñan la instalación de un cd que viene con el original.
Por lo tanto no se ni tengo una plataforma para trabajar con java 3D. Si alguien sabe donde puedo descargar esa plataforma, le agradezco de antemano.

Páginas: [1]