2015-12-18 2 views
3

Я используюЛучший способ выбрать случайную точку на земле

$lat=rand(0-pi()*1000000,pi()*1000000)/1000000; 
$lon=rand(0-pi()*1000000,pi()*1000000)/1000000; 

, чтобы выбрать случайную точку на земле (в радианах), однако этот метод приводит к точкам ближе друг к другу возле опросов, то вблизи экватора, так как 1 ДЭГ $ lon - меньшее расстояние вблизи опросов, а затем на экваторе.

Любые идеи о том, как получить лучшее распределение?

+0

Моя первая мысль была о том, что другая система координат, такие как полярные координаты, использование которых Rho и тета углы, будут работать. Но после размышления я понял, что это не поможет. У вас по сути проблема сферической черепицы: вам нужна система плиток с приблизительной площадью _X_, покрывающая сферу. После этого вы можете их пронумеровать и использовать обычные механизмы случайных чисел, чтобы выбрать один. Поэтому, возможно, вы должны быть Googling «черепицей сферы». –

+0

Каков диапазон значений, которые вы хотите? – Mxsky

+0

Подумайте о том, чтобы переписать это как математическую проблему и опубликовать ее на http://math.stackexchange.com/ –

ответ

1

на основе this article on Wolfram вам нужно что-то вроде этого:

$long = pi() - 2 * pi() * rand(0, 1000000)/1000000; 
$lat = pi()/2 - acos(2 * rand(0, 1000000)/1000000 - 1); 
+0

по моему пониманию статьи '$ lat = acos (rand (0,1000000)/500000-1);' обратите внимание, что я упростил '2/1000000' –

+0

. В этом случае он будет находиться между 0 и pi(). Я думал, что вам нужно это между -pi()/2 и pi()/2. –

+0

да, я вижу это сейчас. Спасибо. –

Смежные вопросы