• Martes 5 de Marzo de 2024, 15:04

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.


Temas - Nagisa

Páginas: [1]
1
Java / Doble Buffer
« en: Sábado 15 de Julio de 2006, 16:02 »
Hola:

Estoy intentando hacer una aplicacion que pinta en un Canvas. Sin usar la tecnica del doble buffer la cosa va bien, pero cuando intento introducirla me da el siguiente error en tiempo de ejecucion:

Código: Text
  1.  
  2. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
  3.         at Dibujo.paint(MiApp.java:59)
  4.         at sun.awt.RepaintArea.paintComponent(Unknown Source)
  5.         at sun.awt.RepaintArea.paint(Unknown Source)
  6.         at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
  7.         at java.awt.Component.dispatchEventImpl(Unknown Source)
  8.         at java.awt.Component.dispatchEvent(Unknown Source)
  9.         at java.awt.EventQueue.dispatchEvent(Unknown Source)
  10.         at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
  11.  
  12.         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
  13.         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  14.         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
  15.         at java.awt.EventDispatchThread.run(Unknown Source)
  16.  
  17.  

Mi codigo:

Código: Text
  1.  
  2. class Dibujo extends Canvas{
  3.  
  4.  Image buffer = null;
  5.  
  6.  public Dibujo(){
  7.   setSize(new Dimension(200, 200));
  8.   buffer = createImage(200, 200);
  9.  }
  10.  
  11.  public void paint(Graphics g){
  12.   Graphics screengc = g;
  13.   g = buffer.getGraphics();   // LINEA 59 del fuente
  14.  
  15.   // Operaciones de dibujo sobre g
  16.  
  17.   screengc.drawImage(buffer, 0, 0, null);
  18.  
  19.  }
  20. }
  21.  
  22.  

Alguien me puede explicar que es lo que pasa (y como arreglarlo)??

Muchas gracias!! Un saludo  :hola:

2
OpenGL / Color De Un Pixel
« en: Jueves 7 de Julio de 2005, 08:00 »
Hola!!

Mi pregunta es si hay alguna forma de poder obtener el colo que tiene un pixel en particular de la escena final.

Estoy haciendo un programa que trabaja con colores a nivel de pixel; para ponerlo es sencillo, por que simplemente creo un punto (GL_POINTS), establezco el color (glColor*()) y despues dibujo el punto (glVertex*()).

Para hacer lo contrario se me habia ocurrido llevar una matrix, con una posicion por cada pixel posible, pero como seria enorme mi duda es si hay alguna funcion de OpenGL que te lo de directamente (tipo el Graphics.GetColor() de Java).

Muchas gracias!!

3
Retos / El Problema De Los Bloques
« en: Sábado 12 de Febrero de 2005, 11:59 »
Como esto esta muy sosete voy a publicar un reto  :) . Es muy sencillo, y corresponde al problema 101 del UVA (del que hablo Binary en algun post anterior). El enunciado, traducido casi literalmente del ingles, es el siguiente:

Citar

El Problema de los bloques.

TRASFONDO:

Muchas areas de la Informatica usan dominios simples y abstractos para estudios tanto analiticos como empiricos. Por ejemplo, un estudio prematuro de IA de planificacion y robotica (STRIP) usaba un mundo de bloques en el cual un brazo robotico llevaba a cabo tareas que implicaban la manipulacion de los bloques.

EL PROBLEMA:

El problema es procesar unas series de mandatos que instruyen a un brazo robotico sobre como manipular los bloques que estan en una mesa plana. Inicialmente hay n bloques en la mesa (enumerados desde 0 hasta n-1) con el bloque b(i) adyacente al bloque b(i+1) para todo 0 <= i < (n-1).

Los mandatos validos para el brazo robotico que manipula los bloques son:

move a onto b
donde a y b son numeros de bloque, pone el bloque a encima del bloque b despues de devolver cualquier bloque que estuviera apilado encima de los bloques a y b a sus posiciones iniciales.

move a over b
donde a y b son numeros de bloque, pone el bloque a encima de la pila que contiene el bloque b, despues de devolver cualquier bloque que estuviera encima del bloque a a su posicion inicial.

pile a onto b
donde a y b son numeros de bloque, mueve la pila de bloques consistente en el bloque a, y cualquier bloque apilado encima del bloque a, encima del bloque b. Todos los bloques encima del bloque b son movidos a sus posiciones iniciales antes del que el apilado tenga lugar. Los bloques apilados encima del bloque a mantienen el orden cuando son movidos.

pile a over b
donde a y b son numeros de bloque, mueve la pila de bloques consistente en el bloque a, y cualquier bloque apilado encima del bloque a, encima de la pila que contenga al bloque b. Los bloques apilados encima del bloque a mantienen el orden cuando son movidos.

quit
termina las manipulaciones en el mundo de bloques.

Cualquier mandato con a = b o en el que a y b esten en la misma pila es un mandato ilegal. Todos los mandatos ilegales deberan de ser ignorados y no deberan de afectar a la configuracion de los bloques.

LA ENTRADA:

La entrada empieza con un entero n en una linea por si misma y representa el numero de bloques en el mundo de bloques. Puedes asumir que 0 < n < 25.
El numero de bloques esta seguido por una secuencia de mandatos de bloques, uno por linea. Tu programa debera procesar todos los mandatos hasta que se encuentre al mandato quit.

Puedes asumir que todos los mandatos seran de la forma especificada arriba. No habra mandatos sintacticamente incorrectos.

LA SALIDA:

La salida debera de consistir en el estado final del mundo de bloques. Cada posicion inicial del bloque i ( 0 <= i < n, donde n es el numero de bloques) debera aparecer seguida inmediatmente por dos puntos (':'). Si hay al menos un bloque en ella, los dos puntos deberan de estar seguidos por un espacio, seguido de la lista de bloques que estan apilados en esa posicion con cada numero de bloque separado del resto por un espacio. No poner espacios sobrantes al final de la linea.

Debera haber una linea de salida por cada posicion de bloque (es decir, n lineas de salida donde n es el entero de la primera linea de la entrada).

ENTRADA DE EJEMPLO:

Código: Text
  1. 10
  2. move 9 onto 1
  3. move 8 over 1
  4. move 7 over 1
  5. move 6 over 1
  6. pile 8 over 6
  7. pile 8 over 5
  8. move 2 over 1
  9. move 4 over 9
  10. quit
  11.  
  12.  

SALIDA DE EJEMPLO:

Código: Text
  1. 0: 0
  2. 1: 1 9 2 4
  3. 2:
  4. 3: 3
  5. 4:
  6. 5: 5 8 7 6
  7. 6:
  8. 7:
  9. 8:
  10. 9:
  11.  
  12.  


Como fecha final del reto daremos algo mas de 15 dias, aunque yo lo hice en una tarde...  :whistling: Pongamos pues el dia 1 de Marzo como tope, dia en el cual publicare la solucion (me estoy currando un pdf que analiza el problema a fondo y lo desarrolla, aunque como ya dije no tiene mucha vuelta de hoja  :smartass: ).

Recordad que la entrada es la entrada estandard (teclado por defecto, salvo redirecciones).

A ver si alguien se anima  :lightsabre:

4
Retos / 18/04/2004 : Braid Theory (dificultad Media)
« en: Domingo 18 de Abril de 2004, 13:51 »
Bien... este problema lo he sacado de un concurso de programacion, y la verdad es que me costo un poco resolverlo (bien por que mi forma no era la mejor o bien por que soy un torpe  :lol: )

El enunciado esta en ingles, aunque la verdad es que tampoco es muy dificil de entender:

A braid is made of one or more loops interlaced in fanciful forms. Surprisingly, every braid can be represented graphically using just four characters: blanks, dashes, bars and the plus sign.
The goal of this simple programming exercise is to find the number of loops thet integrate a given braid.

INPUT DESCRIPTION

Several braid descriptions, separated by empty lines. Each braid is given using the four characters as explained above, is well formed and is representated unambiguosly. The input is finished by the end of file.

OUTPUT DESCRIPTION

For each braid, a line with the numbre of loops contained in it.

SAMPLE IMPUT

Código: Text
  1.  
  2.    +----+
  3.    |       |
  4. +----+  |
  5. |  |   |  |
  6. +--|----+
  7.    |   |
  8.    +-+
  9.  
  10. +--+  +--+  +--+
  11. |  |  |  |  |  |
  12. +-----|--|-----+
  13.    |  |  |  |
  14.    +--+  +--+
  15.  
  16.       +--------+
  17.       |        |
  18.    +--------+  |
  19.    |  |     |  |
  20.    |  +--------+
  21.    |        |
  22. +--------+  |
  23. |  |     |  |
  24. +--|-----+  |
  25.    +--------+
  26.  
  27.  

SAMPLE OUTPUT
Código: Text
  1.  
  2. 1
  3. 1
  4. 3
  5.  
  6.  

5
C/C++ / Modificando Una Cadena
« en: Domingo 8 de Febrero de 2004, 19:10 »
Hola. Tengo el siguiente codigo que te recorre una cadena y va modificando sus caracteres segun una funcion de ellos mismos. Esta funcion viene definida por

char funcion(char);

Para hacer esto he intentado lo siguiente:

void modifica(char* p){
  while(*p != '\0'){
    *p = funcion(*p);
    p++;
  }
}

Esto me compila y me hace todo bien, pero me da un error en tiempo de ejecucion. He conseguido aislar el error, pero no se solucionarlo. El error en concreto esta en la asignacion *p= ...

Pues eso. Por que falla y como se soluciona?? Muchas gracias

Páginas: [1]