Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Aleatorios

Estas en el tema de Aleatorios en el foro de Visual Basic clásico en Foros del Web. Buenas, he visto unos cuantos programas dedicados a generar texturas (por dar el dato) que utilizan números que llaman "aleatorios" para generar las texturas de ...
  #1 (permalink)  
Antiguo 05/06/2008, 09:08
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Aleatorios

Buenas, he visto unos cuantos programas dedicados a generar texturas (por dar el dato) que utilizan números que llaman "aleatorios" para generar las texturas de manera diferente. Por ejemplo, puedes elegir un número (porque se pueden elegir) de un rango enorme, pero siempre que se genere una textura con el mismo valor del número se obtendrá la misma textura. Y digo "aleatorios" porque no parece que sean estrictamente aleatorios, pero no se. No sé si me explico...

La cosa es que me gustaría emplear ese sistema, pero no sé cómo funciona. No entiendo cómo a partir de un número u otro puede salir siempre lo mismo, con los mismos ajustes de parámetros y todo. Estos rangos son muy grandes, por lo que no pueden tener nada preasignado... He utilizado el ejemplo de este tipo de programas porque es donde he visto esto, pero supongo que estarán en más sitios. Alguna idea? Muchas gracias.

Salu000000101!!
  #2 (permalink)  
Antiguo 05/06/2008, 10:22
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Aleatorios

Cita:
Iniciado por auxsys Ver Mensaje
Buenas, he visto unos cuantos programas dedicados a generar texturas (por dar el dato) que utilizan números que llaman "aleatorios" para generar las texturas de manera diferente. Por ejemplo, puedes elegir un número (porque se pueden elegir) de un rango enorme, pero siempre que se genere una textura con el mismo valor del número se obtendrá la misma textura. Y digo "aleatorios" porque no parece que sean estrictamente aleatorios, pero no se. No sé si me explico...

La cosa es que me gustaría emplear ese sistema, pero no sé cómo funciona. No entiendo cómo a partir de un número u otro puede salir siempre lo mismo, con los mismos ajustes de parámetros y todo. Estos rangos son muy grandes, por lo que no pueden tener nada preasignado... He utilizado el ejemplo de este tipo de programas porque es donde he visto esto, pero supongo que estarán en más sitios. Alguna idea? Muchas gracias.

Salu000000101!!
No entendí tu pregunta, pero creo que lo que quieres es generar texturas diferentes de acuerdo a un número ingresado. El código completo para hacerlo no lo voy a colocar aquí porque probablemente será muy largo. Pero te daré una base de cómo puedes hacerlo. Con este código generamos diez números aleatorios entre 'Minimo' y 'Maximo'. Según el valor de 'Numero' los valores generados siempre serán los mismos:
Código:
 
Dim Looping As Integer
Dim Numero As Integer
Dim Minimo As Integer
Dim Maximo As Integer
Numero = 32
Minimo = 10
Maximo = 20
Randomize Numero
For Looping = 0 To 10
    MsgBox Fix(Minimo + Rnd * ((Maximo - Minimo) + 1))
Next Looping
Espero que sirva para darte una idea.
Saludos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 05/06/2008, 12:12
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Aleatorios

Gracias David, pero creo que me expliqué fatal. A ver... otro ejemplo donde he visto esto. Es un programa de 3D que tiene una opción de añadir un cielo con sus nubecitas a la hora de renderizar. Pues bien, aquí también se usa este sistema de números "aleatorios". Cuando le das un valor, 1000 por ejemplo, las nubes tienen siempre una disposición determinada, y si le pones 4519 tienen otra diferente. Siempre con 1000 tendrán la misma disposición, y siempre con 4519 tendrán otra determinada. Por eso dije que no veo claramente la 'aleatoriedad' de este sistema, pero bueno. Y por último, decir que el valor no realiza una progresión en el movimiento de las nubes. Es decir, con 1000 y con 1001, la forma de las nubes no tiene nada que ver. Y no sólo puede afectar a la disposición de las nubes, sino a muchos más parámetros como luminosidad, densidad...

Sé que puede que todavía no haya quedado claro, y que lo que pido es muy raro, pero me sería bastante útil. Bueno, muchas gracias.
  #4 (permalink)  
Antiguo 05/06/2008, 12:18
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
De acuerdo Respuesta: Aleatorios

Pues bien, el código que te puse hace exactamente eso:
Código:
 
Dim Looping As Integer
Dim Numero As Integer
Dim Minimo As Integer
Dim Maximo As Integer
Numero = 32
Minimo = 10
Maximo = 20
Randomize Numero
For Looping = 0 To 10
    MsgBox Fix(Minimo + Rnd * ((Maximo - Minimo) + 1))
Next Looping
Pasándole el valor 32 te genera diez números aleatorios entre 10 y 20. Si en vez de poner 32 colocas 33 los números generados serán diferentes. Pero los números generados siempre serán iguales al colocar el mismo número...
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 05/06/2008, 13:03
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Aleatorios

Ahhh pues perdona, pero cuando lo probé generaba 10 número aleatorios, sí, pero cada vez diferentes. Ahora que vuelvo a probarlo sólo consigo que sean los mismos si pongo el código en el evento Load del formulario... supongo que habrá alguna razón, me la podrías explicar? Es que lo necesitaría para generarlos en cualquier momento. Y bueno, mil gracias, eso era justamente lo que quería.

Salu00000010!!
  #6 (permalink)  
Antiguo 05/06/2008, 13:35
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Aleatorios

Cita:
Iniciado por auxsys Ver Mensaje
Ahhh pues perdona, pero cuando lo probé generaba 10 número aleatorios, sí, pero cada vez diferentes. Ahora que vuelvo a probarlo sólo consigo que sean los mismos si pongo el código en el evento Load del formulario... supongo que habrá alguna razón, me la podrías explicar? Es que lo necesitaría para generarlos en cualquier momento. Y bueno, mil gracias, eso era justamente lo que quería.

Salu00000010!!
Se me olvidó, en vez de colocar Randomize Numero coloca:
Código:
 
Rnd -Numero
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 05/06/2008, 13:44
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Aleatorios

Ahora sí. Muchísimas gracias!!
  #8 (permalink)  
Antiguo 08/06/2008, 06:15
Avatar de Txoco  
Fecha de Ingreso: junio-2008
Ubicación: Perdido en tierras Quijotescas
Mensajes: 189
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Aleatorios

Buenas, ya tienes una respuesta, pero a ver si te interesa esto:

Realmente, el ordenador es técnicamente incapaz de generar números aleatorios de por sí, y la explicación es un poco larga como para apuntarla aquí. Lo que realmente te devuelve cuando le pides Rnd, u otra función en el lenguaje que sea, es lo que se denomina un "número pseudoaleatorio"; tiene algo de azar, pero no totalmente. Si buscas información sobre criptografía, puedes averiguar mucho sobre esto.

La solución es tan sencilla como hacer la llamada

Randomize Timer

antes de pedir un número aleatorio. Realmente, basta con que invoques esa instrucción en el evento Load o en Sub Main, y lo que hace es tomar la semilla aleatoria de la hora del sistema, por lo que salvo que ejecutes la instrucción en días diferentes y a la misma hora exacta, los valores devueltos por Rnd siempre serán diferentes. También puedes buscar o añadir variables más o menos impredecibles, como un cálculo con las coordenadas del ratón, el handle de la ventana del programa o lo que se te ocurra, pero por lo general, con Timer es suficiente.
  #9 (permalink)  
Antiguo 07/07/2008, 15:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Aleatorios

Buenas, perdón por reabrir el post pero la verdad es que dejé el tema y ahora lo quiero retomar.
El código que me dieron funciona perfectamente, pero no sé cómo reiniciar la cuenta de los números aleatorios. Es decir, yo tengo este código en un commandbutton:

Código:
a = 1
Rnd a

For n = 1 To 10
    b = Int(Rnd * 10)
    Print b
Next n
Sencillito. La cosa es que la serie de números comienza siempre igual (como tiene que ser) al iniciar el programa, pero luego no sé cómo reiniciar esa serie.
Por ejemplo, si genero 10 números siendo a=1, la serie es {5,5,2,3,7,0,7,8,7,0}, pero si quiero volver a obtener esos números no sé cómo hacerlo, porque a partir de entonces sólo puedo obtener los siguientes de la serie. No sé si me explico...
Bueno, gracias!
  #10 (permalink)  
Antiguo 07/07/2008, 15:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Aleatorios

El problema es que estás pasando a Rnd un valor positivo, mientras que para obtener los mismos números de la secuencia anterior y reiniciar la secuencia, debes llamar a Rnd con un valor negativo como te indiqué anteriormente. O sea:
Código:
Rnd -a
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 08/07/2008, 13:41
 
Fecha de Ingreso: mayo-2008
Mensajes: 42
Antigüedad: 16 años
Puntos: 0
Respuesta: Aleatorios

Ahhh, ok, no sé por qué empecé haciéndolo así pero luego pasé a la otra manera. Bueno, muchas gracias.

Salu00000010!!!
  #12 (permalink)  
Antiguo 08/07/2008, 13:43
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Aleatorios

Cita:
Iniciado por auxsys Ver Mensaje
Ahhh, ok, no sé por qué empecé haciéndolo así pero luego pasé a la otra manera. Bueno, muchas gracias.

Salu00000010!!!
De nada, debes recordar que si no es negativo, la secuencia no se repetirá.

Nos vemos
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:49.