una simulacion realizar pseudoaleatorios para numeros los importancia historia generar generadores generacion criptografia conclusion algoritmos aleatorios random lua

random - simulacion - Generador de números pseudoaleatorios para el ruido



numeros pseudoaleatorios historia (3)

Ha habido bibliotecas de lua hechas para esto, una que encontré es: lrandom

Utiliza el algoritmo Mersenne Twister que puede adaptarse mejor a sus necesidades.

Estoy intentando hacer que el algoritmo de ruido de Perlin se describa en http://freespace.virgin.net/hugo.elias/models/m_perlin.htm usando Lua. Sin embargo, no funciona correctamente ya que Lua no admite operadores bit a bit, que son necesarios para la función de número pseudoaleatorio en esa página. Traté de jugar con randomseed () pero todo lo que pude inventar me hizo patrones realmente extraños. Necesito un generador de números pseudoaleatorios que genere números entre -1 y 1 cuando se le den los parámetros x, y, y una semilla aleatoria. El seudocódigo está bien.

¡Gracias!


No conozco ninguna solución pura de Lua para el número seudoaleatorio, pero podrías tratar de escribir el algoritmo que mencionas usando algunas bibliotecas de bits Lua puros.

Encontré estos en la Wiki :

  • LuaBit es una operación de operación a bit totalmente escrita en Lua. Las operaciones bit a bit soportadas son: not, and, or, xor, right shift y left shift. Varias utilidades: hexadecimal a dec, utf8 a usc2 y nokia .nfb a txt.
  • BitUtils son operaciones bit a bit implementadas completamente en Lua.
  • El Descompresor de compresas de módulo incluye bit.numberlua , que implementa operaciones bit a bit en Lua puro como números.

Es fácil hacer un generador de números aleatorios congruente lineal en Lua. Una simple es Park-Miller

function pmrng (x) return math.fmod(x * 16807, 2147483647) end

Esto le dará el siguiente entero al azar [1..2147483646] después de x , la semilla. Use este entero para hacer un flotante dividiendo por el módulo, 2147483647 en este caso.

prng_seed = 13579 function upmrng () prng_seed = pmrng(prng_seed); return prng_seed / 2147483647 end

Para escalar esto a -1 .. +1 do

upmrng() * 2 - 1