Necesito una aclaración con un algoritmo que genere valores aleatorios para mi rastreador de rayos para mascotas.
Emite rayos desde un punto. Y tengo el problema con la distribución de estos rayos: necesito que la distribución sea uniforme, pero no es ...Distribución aleatoria uniforme (Monte-Carlo) en la esfera de la unidad
El problema al que me enfrento ahora es que la distribución que es uniforme inicialmente no es uniforme después de mis distorsiones de el espacio de resultados.
Así que, por ejemplo, genero los ángulos r y t si el sistema de coordenadas polares. La distribución no es uniforme y no puede ser uniforme: el espacio cerca de cada polo tiene una densidad de resultados mucho mayor que, por ejemplo, cerca del ecuador. La razón es bastante clara: convierto puntos distribuidos uniformemente del espacio cilíndrico al esférico. Y yo distorsiono los resultados. El mismo problema es si normalizo los puntos generados aleatoriamente en el cubo.
Mi idea ahora es esta: quiero crear un tetraedro, normalizar sus vértices, dividir cada cara (triángulo) con el punto en el medio, normalizar y repetir recursivamente hasta que tenga suficientes puntos. Luego "distorsiono" estos puntos un poco. Luego los normalizo de nuevo. Eso es.
Entiendo que este método no es puro método matemático Monte-Carlo en sí, porque no uso la distribución aleatoria en ningún paso, excepto en el último. Y no me gusta esta solución para esta complejidad.
¿Puede alguien sugerir algo más simple, pero todavía
- aleatoria
- uniforme
- rápida
- sencilla
Gracias!
EDIT:
necesito un método rápido, no sólo la correcta. Es por eso que estoy preguntando por Montecarlo. Las respuestas proporcionadas son correctas, pero no rápidas. El método con tetraedro es rápido, pero no muy "aleatorio" => incorrecto.
Realmente necesito algo más adecuado.
Tienes razón, en realidad no es la respuesta, pero es bastante interesante. – avp