আমি আমার অবস্থান কাছাকাছি এলোমেলো অবস্থান তৈরি করার চেষ্টা করছি। আমি যা চাই তা হল আমার অবস্থানের চারপাশে 200 মিটার বৃত্তের ভিতরে এলোমেলো অক্ষাংশ / দ্রাঘিমাংশ জোড়া তৈরি করা।
এটিই সূত্রটি আমি নিয়ে এসেছি (স্ট্যাকওভারফ্লোতে লোকের সহায়তায়): (র্যান্ডম সংখ্যা -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
সময়ের প্রায় 1% 0.1% এর চেয়ে বেশি মান প্রদান করবে। আপনি random.nextDouble
বা ব্যবহার করছেন না কেন random.nextFloat
? (২) গুন x0
এবং y0
দ্বারা 1E6
বরং রহস্যময় হয়; দেখে মনে হচ্ছে না এটি সঠিক ফলাফল দেবে।