1

バウンディングボックス内にランダムなLat/Lngを作成しようとしています。以下のコードはLat/Lngsを作成し、それらはマップ上にプロットされます...そしてそれらは正しい国にありますが、正しい「ボックス」にはありません

私のバウンディングボックスは次のようになります。

top_left = 51.514881121099904, -0.1293877362387679 
bottom_right = 51.492151803709525, -0.09693947143827275

minLat = 51.514881121099904
maxLat = 51.492151803709525
minLng =  -0.09693947143827275
maxLng = -0.1293877362387679 

私のコードは次のようになります。

markers = []

10.times do
    x = minLat + rand(maxLat - minLat)
    y = minLng + rand(maxLng - minLng)
    latLng = [x,y]
    markers <<  latLng
end

markers.each do |x|
    puts "#{x[0]} , #{x[1]}"
end

しかし、それは正しいlat/Lngsを出力していません。私が間違っていることはありますか?私はこれを間違った方法で見ていますか?

たとえば、1回の実行で次の出力が得られます。

51.51778835694538 , 0.8479098023328967
51.56834519895925 , 0.70003581382595
52.47933844269927 , 0.6167209565236026
51.52116824209034 , 0.8997051592766233
52.26830135905681 , 0.7514635122980192
52.143607260212896 , 0.21838042686322268
52.04649651836466 , 0.6683244476203801
52.057410769358576 , -0.08734906181439461
52.053408170846915 , 0.1600069328435182
51.8991829618331 , 0.3993135670912452

しかし、明らかに52.26830135905681は最小緯度と最大緯度の間にありません...だから私は少し混乱しています

rand()は何らかのソートまたは切り上げを行いますか?それはそのような大きなフロートで動作しますか?

4

2 に答える 2

3

rand()はどのように定義されていますか?頭のてっぺんから思い出せない...

rubyのRandomクラス(http://www.ruby-doc.org/core-1.9.3/Random.html)を使用して、次のようにすることができます。

rng = Random.new(seed)
lat = minLat + rng.rand * (maxLat - minLat)
lng = minLng + rng.rand * (maxLng - minLng) 
于 2012-10-11T19:16:59.917 に答える
0

randは、引数にto_i.absを使用します。より良い使用rand(minLat..maxLat)。また、コードでは、最小値と最大値が混同されているようです。

maxLat = 51.514881121099904
minLat = 51.492151803709525
maxLng = -0.09693947143827275
minLng = -0.1293877362387679 
markers = []

10.times do
  markers << [rand(minLat..maxLat), rand(minLng..maxLng)]
end

markers.each do |lat, lng|
  puts "#{lat} , #{lng}"
end
于 2012-10-11T19:24:35.127 に答える