Hace un tiempo intenté hacer un programa en Pascal que simulara el movimiento aleatorio de una figura. En Pascal hay una función que te permite generar números enteros al azar (Randomize y Random(x), la "x" para establecer un límite), y en función de estos obtener coordenadas aleatorias.
El movimiento tenía que ser continuo, así que por cada nueva coordenada tenía 8 posibilidades (4 píxeles arriba-abajo-iziquiera-derecha y 4 píxeles para cada esquina). Si del Random(8) me salía un 1 la nueva coordenada era CordX = CordX - 1 y CordY = CordY + 1, si salía un 2 la nueva coordenada era CordX = CordX y CordY = CordY + 1, etc..
El caso es que observando el movimiento de la figura (un comecocos cutre
) me di cuenta de que tarde o temprano siempre acaba en el mismo lugar, aunque no siguiera la misma trayectoria para llegar o no tardara lo mismo.
A veces se quedaba "oscilando" en el centro un buen rato, pero una vez empezaba a salirse de él lo hacía siempre en la misma dirección, y acababa en el borde de la pantalla de arriba tirando a la derecha (pero sin llegar a la esquina).
Repasé el programa de arriba a abajo para ver si repetí alguna coordenada, pero todas eran distintas y cada una de ellas representaba un píxel distinto, y como lo máximo que les sumaba o restaba era un "1" no se podía producir ningún salto en ninguna dirección (de hecho, no se producían, sólo que siguiendo una trayectoria continua llegaba siempre a ese borde).
No sé muy bien cómo se generan esos números aleatorios, creo que tiene que ver con algo del reloj del microprocesador pero no sé si esa es la razón de que me saliera así, o es un error de programación o de algo que no estoy teniendo en cuenta.
No es urgente (ná, lo hice para pasar el rato
), pero si a alguien se le ocurre alguna idea..
Saludos.
El movimiento tenía que ser continuo, así que por cada nueva coordenada tenía 8 posibilidades (4 píxeles arriba-abajo-iziquiera-derecha y 4 píxeles para cada esquina). Si del Random(8) me salía un 1 la nueva coordenada era CordX = CordX - 1 y CordY = CordY + 1, si salía un 2 la nueva coordenada era CordX = CordX y CordY = CordY + 1, etc..
El caso es que observando el movimiento de la figura (un comecocos cutre
) me di cuenta de que tarde o temprano siempre acaba en el mismo lugar, aunque no siguiera la misma trayectoria para llegar o no tardara lo mismo.A veces se quedaba "oscilando" en el centro un buen rato, pero una vez empezaba a salirse de él lo hacía siempre en la misma dirección, y acababa en el borde de la pantalla de arriba tirando a la derecha (pero sin llegar a la esquina).
Repasé el programa de arriba a abajo para ver si repetí alguna coordenada, pero todas eran distintas y cada una de ellas representaba un píxel distinto, y como lo máximo que les sumaba o restaba era un "1" no se podía producir ningún salto en ninguna dirección (de hecho, no se producían, sólo que siguiendo una trayectoria continua llegaba siempre a ese borde).
No sé muy bien cómo se generan esos números aleatorios, creo que tiene que ver con algo del reloj del microprocesador pero no sé si esa es la razón de que me saliera así, o es un error de programación o de algo que no estoy teniendo en cuenta.
No es urgente (ná, lo hice para pasar el rato
), pero si a alguien se le ocurre alguna idea..Saludos.






).
y algo de C/C++ y JAVA 





.
. En el programa que hice de la liga no me pasaba porque era yo quien elegía cuando se iban a generar los números "aleatorios", y como yo no seguía ningún patrón
). Pero creo recordar que era necesario para poder utilizar el Random(x), vaya, si no tampoco le vería mucha utilidad a esa función.
; es decir, si con un millón de datos tienes un error relativo del 0.02% (por decir algo), con cuatro millones deberías tener un 0.01%.
, y haz los sumatorios que definen la correlación,
mayor, por lo que acabar en una esquina es normal. Lo más sencillo sería simplemente permitir sólo movimientos en los ejes cartesianos.
, por lo que te conviene tener cuantos más pasos posibles, y cuanto más espacio posible para medirlo correctamente). Una posibilidad que tienes es hacer el universo períodico (es decir, que al salir por arriba aparezca por abajo). No te olvides de tener esto en cuenta al calcular la distancia recorrida.
.. Pues no tengo ni idea de qué pasaría pero si pudiera lo probaría ahora mismo.
, ni siquiera necesitaría generar números aleatorios ¿no?..
Comentario