Ich versuche, einen Punkt innerhalb eines Radius zu generieren, und ich bekomme falsche Werte. Irgendjemand, der sich die Mühe macht, einen Blick darauf zu werfen und mir zu sagen, was ich für die Länge falsch mache? Dies war ein formelhafte Ansatz auf einer andere Frage gestellt ...Zufälliges Erzeugen einer Entfernung innerhalb eines Radius ergibt einen Punkt außerhalb der Grenzen
public static Location generateLocationWithinRadius(Location myCurrentLocation) {
return getLocationInLatLngRad(1000, myCurrentLocation);
}
protected static Location getLocationInLatLngRad(double radiusInMeters, Location currentLocation) {
double x0 = currentLocation.getLatitude();
double y0 = currentLocation.getLongitude();
Random random = new Random();
// Convert radius from meters to degrees
double radiusInDegrees = radiusInMeters/111000f;
double u = random.nextDouble();
double v = random.nextDouble();
double w = radiusInDegrees * Math.sqrt(u);
double t = 2 * Math.PI * v;
double x = w * Math.cos(t);
double y = w * Math.sin(t);
double new_x = x/Math.cos(y0);
double new_y = y/Math.cos(x0);
double foundLatitude;
double foundLongitude;
boolean shouldAddOrSubtractLat = random.nextBoolean();
boolean shouldAddOrSubtractLon = random.nextBoolean();
if (shouldAddOrSubtractLat) {
foundLatitude = new_x + x0;
} else {
foundLatitude = x0 - new_x;
}
if (shouldAddOrSubtractLon) {
foundLongitude = new_y + y0;
} else {
foundLongitude = y0 - new_y;
}
Location copy = new Location(currentLocation);
copy.setLatitude(foundLatitude);
copy.setLongitude(foundLongitude);
return copy;
}
ich auch, dass aus irgendeinem Grunde ergeben die gültigen Punkte eine einheitliche Linie von Koordinaten sagen soll, wenn sie anzusehen.
Ich denke, der Breitengrad wird korrekt verarbeitet, während der Längengrad nicht ist.
Zeigen Sie Ihre Eingabe, Ausgabe und erwartete Ausgabe an. – shmosel
Ich sollte auch sagen, dass ich statische Werte jetzt verwende, aber ich werde sie einstellbar halten und die Anzahl der Zeiger reduzieren – KoalaKoalified
lat lng variiert sehr viel in Bezug auf Dezimalstellen. Der Zufallswert, den Sie generieren, sollte sich im Bereich von 0,000x unterscheiden, wenn sie in einem Radius begrenzt sind. –