2012-03-10 7 views
5

Potrzebuję wygenerować losowe pary liczb (floats) w określonym zakresie. Zasadniczo są to punkty za [łac LNG] par (długość geograficzna - współrzędne szerokości geograficznej)PHP random - exluding/include/floats/negatives i inne zwierzęta

Myślałem To byłoby bardzo proste z

<?php echo (rand(0,60).'.'.rand(0,99999999999999).' || '); // yes, a string is ok...?> 

ale to nie daje mi kontrolę nad tym, jak wiele numerów po float point (rozdzielczość) - które muszę naprawić.

Więc następna faza była:

<?php echo (rand(0,60*pow(10,6)))/pow(10,6).' || '; //pow(10,$f) where $ is the resolution ?> 

i to działa. rodzaj .. czasami daje rezultaty jak

22.212346 || 33.134 || 36.870757 || //(rare , but does happen) 

ale hej - współrzędne są od -90 do 90 (dł) i -180 do 180 (LAN) - co około minus?

echo (rand(0,-180*pow(10,9)))/pow(10,9).' || '; 

że powinien to zrobić .. i łącząc wszystko razem powinno dać mi jakoś losowy ciąg jak

23.0239423525 || -135.937419777 

więc po tym wszystkim wprowadzenie - tutaj jest są moje pytanie (s).

  • Być nowicjuszem jakim jestem - czy czegoś brakuje? czy nie ma wbudowanej funkcji do generowania losowych pływaków z dodatnim lub ujemnym zakresem w PHP?

  • Dlaczego powyższa funkcja czasami okazuje tylko rozdzielczość 3,4 lub 5, jeśli ma wrócić 6 (nie zastosowałem ABS ani ROUND) - czy jest zautomatyzowane zaokrąglanie w php? a jeśli tak, to jak tego uniknąć?

  • Zauważyłem, że "losowy" nie jest tak losowy - generowane liczby są zawsze mniej więcej seriami między zakresem - blisko siebie. czy PHP to prosty, bardzo bardzo, bardzo szybko obracający się licznik?

  • JAK WYKLUCZYĆ zakres od tego wygenerowanego zakresu? (lub faktycznie i tablica zakresów)

Wiem, że to wiele pytań, ale każda pomoc/myśl będzie świetna! (A jeśli pierwsza jest pozytywnie odpowiedział, reszta może być niemal ignorowana :-)

Odpowiedz

3

rand() funkcja może mieć negatywny min więc może można to zrobić:

$num = mt_rand(-180000000, 180000000)/1000000; 
    echo number_format($num, 6); 

jeśli chcesz 6 miejsc po przecinku.

Jeśli chodzi o wykluczanie zakresu, być może trzeba to zrobić w dwóch etapach. Najpierw rozważ zakresy, które chcesz. Powiedzmy, że masz 3 zakresy, z których chcesz generować losową liczbę. zakres 1 = -180 do -10, zakres 2 = 10 - 100 i zakres 3 = 120 - 180. Następnie możesz wygenerować liczbę losową od 1 do 3 włącznie, użyj jej do wyboru jednego zakresu, a następnie wygeneruj liczbę w tym zakresie .

+0

Cześć dzięki - twój kod jest oczywiście bardziej elegancki i skuteczniejszy niż mój - nie znałem 'number_format()' - ale jak mogę WYKLUCZYĆ zakres od funkcji losowej (druga część pytania ..) –

+0

Cześć @Obmerk Ninenine zobacz moją edycję. –

+0

dziękuję, chodzi o to, że muszę wykluczyć zakres SZCZEGÓŁOWY z RANDOM - a nie RANDOM z RANDOM - tylko po to, aby dać przykład, powiedzmy, że muszę wygenerować współrzędne świata, ale WYKLUCZAĆ wszystkie współrzędne, które są dla przykład "Korea Północna" lub "pustynie" - więc mam zestaw koordynatów, w jaki sposób mogę wykluczyć te zakresy? używanie tablicy jest moją jedyną opcją? tablica będzie ogromna ... (chyba że uda mi się jakoś opisać zamknięty wielokąt w php ...) dlatego RANGE jest moją jedyną opcją, którą myślę. ale jak dokładnie? –

Powiązane problemy