मैं अपने स्थान के पास यादृच्छिक स्थान बनाने का प्रयास कर रहा हूं। मैं जो चाहता हूं, वह मेरे स्थान के आसपास 200 मीटर सर्कल के अंदर यादृच्छिक अक्षांश / देशांतर जोड़े बनाना है।
यह वह सूत्र है जिसके साथ मैं (StackOverFlow में लोगों की मदद से) आया: (यादृच्छिक संख्या -1 और 1 के बीच) * त्रिज्या + (पुराना देशांतर) = पुराने देशांतर के त्रिज्या के भीतर नया देशांतर
(यादृच्छिक संख्या -1 और 1 के बीच) * त्रिज्या + (पुराना अक्षांश) = पुराने अक्षांश के दायरे में नया अक्षांश
बात यह है कि मेरे कार्यान्वयन के साथ कुछ अजीब हो रहा है क्योंकि सभी यादृच्छिक स्थान मेरे स्थान केंद्र के पास हैं, ऐसा लगता है कि सूत्र पूरे त्रिज्या को कवर नहीं करता है।
मेरे फॉर्मूले में गलत होने का कोई विचार हो सकता है?
वर्तमान जावा कार्यान्वयन को दिखाने के लिए संपादित:
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
? (ii) गुणा x0
और y0
से 1E6
नहीं बल्कि रहस्यमय है, ऐसा लगता नहीं है कि यह सही परिणाम देगा।