Konumumun yakınında rasgele yerler oluşturmaya çalışıyorum. İstediğim yerimi çevreleyen 200 metrelik bir çember içerisinde rastgele enlem / boylam çiftleri oluşturmak.
Bu benim karşılaştığım formül (StackOverFlow'daki insanların yardımıyla): (-1 ile 1 arasındaki rasgele sayı) * radius + (eski boylam) = eski boylamın yarıçapı içindeki yeni boylam
(-1 ile 1 arasında rasgele sayı) * yarıçapı + (eski enlem) = eski enlem yarıçapı içindeki yeni enlem
Mesele şu ki, uygulamamla ilgili garip bir şey oluyor; çünkü tüm rastgele yerler konum merkezime çok yakın, formül tüm yarıçapı kapsamıyor gibi görünüyor.
Formülümde neyin yanlış olabileceği hakkında bir fikrin var mı?
Mevcut java uygulamasını göstermek için düzenlenmiştir:
public static Location getLocation(Location location, int radius) {
Random random = new Random();
// Convert radius from meters to degrees
double radiusInDegrees = radius / METERS_IN_DEGREES;
double x0 = location.getLongitude() * 1E6;
double y0 = location.getLatitude() * 1E6;
double u = random.nextInt(1001) / 1000;
double v = random.nextInt(1001) / 1000;
double w = radiusInDegrees * Math.sqrt(u);
double t = 2 * Math.PI * v;
double x = w * Math.cos(t);
double y = w * Math.sin(t);
// Adjust the x-coordinate for the shrinking of the east-west distances
double new_x = x / Math.cos(y0);
// Set the adjusted location
Location newLocation = new Location("Loc in radius");
newLocation.setLongitude(new_x + x0);
newLocation.setLatitude(y + y0);
return newLocation;
}
Neyi yanlış yaptığımdan emin değilim, çünkü yeni yerler denizin ortasında yaratılmış.
Herhangi bir fikir?
random.nextInt(1001)/1000
zamanın% 1 ila% 1'inden daha büyük bir değer döndürecektir. Neden kullanmıyorsunuz random.nextDouble
ya random.nextFloat
? (ii) çarpma x0
ve y0
ile 1E6
oldukça gizemlidir; doğru sonuçlar üretecek gibi görünmüyor.