내 위치 근처에 임의의 위치를 만들려고합니다. 내가 원하는 것은 내 위치를 둘러싼 200m 원 안에 임의의 위도 / 경도 쌍을 만드는 것입니다.
이것은 (StackOverFlow의 사람들의 도움으로) 얻은 공식입니다 : (-1과 1 사이의 임의의 숫자) * 반경 + (오래된 경도) = 오래된 경도의 반경 내에서 새로운 경도
(-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
시간의 약 0.1 %보다 큰 값을 반환합니다. 왜 사용하지 않는 random.nextDouble
나 random.nextFloat
? (ⅱ) 배가 x0
하고 y0
으로는 1E6
오히려 신비; 올바른 결과를 얻는 것처럼 보이지 않습니다.