Я пытаюсь создать случайные места рядом с моим местоположением. Я хочу создать случайные пары широта / долгота внутри 200-метрового круга, окружающего мое местоположение.
Вот формула, которую я придумал (с помощью людей из StackOverFlow): (Случайное число от -1 до 1) * radius + (старая долгота) = новая долгота в радиусе старой долготы
(Случайное число от -1 до 1) * радиус + (старая широта) = новая широта в пределах радиуса старой широты
Дело в том, что с моей реализацией происходит что-то странное, потому что все случайные местоположения находятся слишком близко от моего центра местоположения, кажется, что формула не охватывает весь радиус.
Есть идеи, что может быть не так с моей формулой?
Отредактировано, чтобы показать текущую реализацию Java:
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;
}
Я не уверен, что я делаю неправильно, потому что новые места создаются посреди моря.
Есть идеи?
random.nextInt(1001)/1000
вернет значение больше 1 примерно в 0,1% времени. Почему вы не используете random.nextDouble
или random.nextFloat
? (б) Умножение x0
и y0
на 1E6
весьма таинственное; не похоже, что это даст правильные результаты.