PHP aleatorio: excluir / incluir / flotar / negativos y otros animales
Frecuentes
Visto 560 veces
5
Necesito generar pares aleatorios de números (flotantes), dentro de un cierto rango. Básicamente, esos son puntos para pares [Lat, Lng] (Longitud - coordenadas de latitud)
Pensé que esto sería muy sencillo con
<?php echo (rand(0,60).'.'.rand(0,99999999999999).' || '); // yes, a string is ok...?>
pero no me dio el control sobre cuántos números después del punto flotante (resolución), que necesito arreglar.
Así que la siguiente fase fue:
<?php echo (rand(0,60*pow(10,6)))/pow(10,6).' || '; //pow(10,$f) where $ is the resolution ?>
y esto funciona tipo de... a veces produce resultados como
22.212346 || 33.134 || 36.870757 || //(rare , but does happen)
pero bueno, las coordenadas son de -90 a 90 (lon) y de -180 a 180 (lan), ¿qué pasa con el signo menos?
echo (rand(0,-180*pow(10,9)))/pow(10,9).' || ';
eso debería hacerlo ... y combinar todo junto debería darme de alguna manera una cadena aleatoria como
23.0239423525 || -135.937419777
así que después de toda esta introducción - aquí is Son mis preguntas.
Siendo el novato que soy, ¿me estoy perdiendo algo? ¿No hay una función incorporada para generar flotadores aleatorios con un rango negativo a positivo en PHP?
¿Por qué la función anterior a veces solo cambia la resolución 3,4 o 5 si se le dice que devuelva 6 (no apliqué ningún ABS o ROUND)? ¿Hay un redondeo automático en php? y si lo hay, ¿cómo evitarlo?
He notado que el "aleatorio" no es tan aleatorio: los números generados siempre son más o menos series entre un rango, cerca uno del otro. ¿Es PHP aleatorio un simple contador giratorio muy, muy rápido?
¿Cómo EXCLUYO un rango de este rango generado? (o en realidad y una variedad de rangos)
Sé que estas son muchas preguntas, ¡pero cualquier ayuda / pensamiento sería genial! (y si la primera se responde positivamente, el resto casi se puede ignorar :-)
1 Respuestas
3
La función rand() puede tomar un minuto negativo, así que tal vez puedas hacer esto:
$num = mt_rand(-180000000, 180000000)/1000000;
echo number_format($num, 6);
si quieres 6 lugares después del punto decimal.
En términos de excluir un rango, es posible que deba hacerlo en dos pasos. Primero considere los rangos que desea. Digamos que tiene 3 rangos a partir de los cuales desea generar el número aleatorio. rango 1 = -180 a -10, rango 2 = 10 - 100 y rango 3 = 120 - 180. Luego puede generar un número aleatorio del 1 al 3 inclusive, utilícelo para elegir un rango y luego generar el número en ese rango .
respondido 10 mar '12, 12:03
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php function random range or haz tu propia pregunta.
Hola, gracias. Su código es obviamente más elegante y eficiente que el mío. No conocía el
number_format()
- pero, ¿cómo puedo EXCLUIR un rango de la función aleatoria (la otra parte de la pregunta ...) - Obmerk Kronengracias, el punto es que necesito excluir un rango ESPECÍFICO de RANDOM, y no RANDOM de RANDOM, solo para darle un ejemplo, digamos que necesito generar coordenadas mundiales pero EXCLUIR todas las coordenadas que son, por ejemplo "Corea del Norte" o "desiertos", así que tengo ese conjunto de coordenadas, ¿cómo puedo excluir esos rangos? ¿Usar matriz es mi única opción? la matriz será enorme ... (a menos que de alguna manera pueda describir un polígono cerrado en php ...) por lo tanto, creo que un RANGO es mi única opción. pero como exactamente - Obmerk Kronen
Lo que sugiero es que es posible que desee excluir un rango, pero eso deja dos rangos que desea incluir. O si desea excluir dos rangos, entonces está incluyendo 3 rangos... y así sucesivamente. Sé que la cantidad de rangos puede ser alta, si desea excluir n rangos, en realidad está incluyendo n + 1 rangos. Dado que el valor aleatorio puede ocurrir en cualquiera de los n+1 rangos, debe seleccionar aleatoriamente uno de ellos. Luego seleccione aleatoriamente el valor dentro del rango seleccionado. - Vicente Ramdhanie
ok .. voy a ir a probar . gracias por tu tiempo ! Solo quería estar seguro de que no hay forma en PHP aleatorio (u otra función desconocida para mí) de excluir/incluir variables (rangos de lectura) de otro rango... gracias de nuevo. - Obmerk Kronen
por supuesto, en su situación, la respuesta es mucho más compleja ya que desea dos valores aleatorios que de alguna manera deben corresponder a un rango válido. Si está buscando un lugar aleatorio en un mundo 2d, es posible que desee considerar algunos algoritmos geométricos que pueden simplificar su vida. - Vicente Ramdhanie