কম্পিউটার

C++ এ একটি বৃত্তে র্যান্ডম পয়েন্ট তৈরি করুন


ধরুন আমাদের একটি বৃত্তের কেন্দ্রের ব্যাসার্ধ এবং x-y অবস্থান রয়েছে, আমাদেরকে randPoint() নামে একটি ফাংশন লিখতে হবে যা বৃত্তে একটি অভিন্ন র্যান্ডম বিন্দু তৈরি করে। তাই কিছু গুরুত্বপূর্ণ বিষয় থাকবে যা আমাদের মনে রাখতে হবে -

  • ইনপুট এবং আউটপুট মান ফ্লোটিং-পয়েন্টে রয়েছে।
  • বৃত্তের কেন্দ্রের ব্যাসার্ধ এবং x-y অবস্থান ক্লাস কনস্ট্রাক্টরে পাস করা হয়।
  • বৃত্তের পরিধির একটি বিন্দুকে বৃত্তের মধ্যে ধরা হয়।
  • র্যান্ডপয়েন্ট() র্যান্ডম পয়েন্টের x-অবস্থান এবং y-অবস্থান প্রদান করে, সেই ক্রমে।

সুতরাং যদি ইনপুটটি [10, 5,-7.5] এর মতো হয়, তবে এটি কিছু র্যান্ডম পয়েন্ট তৈরি করতে পারে যেমন [11.15792,-8.54781], [2.49851,-16.27854], [11.16325,-12.45479]।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ইউনিফর্ম() নামক একটি পদ্ধতির সংজ্ঞা দাও। এটি নিম্নরূপ কাজ করবে -
  • এলোমেলো_সংখ্যা/ম্যাক্স র্যান্ডম ফেরত দিন
  • ইনিশিয়ালাইজারের মাধ্যমে rad, এবং কেন্দ্র স্থানাঙ্ক শুরু করুন
  • র্যান্ডপয়েন্ট নিম্নরূপ কাজ করবে -
  • থিটা =2*Pi*uniform()
  • r :=ইউনিফর্ম() এর বর্গমূল
  • একটি জোড়া ফেরত দিন যেমন (center_x + r*radius*cos(theta), center_y + r*radius*sin(theta))

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   const double PI = 3.14159265358979732384626433832795;
   double m_radius, m_x_center, m_y_center;
   double uniform() {
      return (double)rand() / RAND_MAX;
   }
   Solution(double radius, double x_center, double y_center) {
      srand(time(NULL));
      m_radius = radius; m_x_center = x_center; m_y_center = y_center;
   }
   vector<double> randPoint() {
      double theta = 2 * 3.14159265358979323846264 * uniform();
      double r = sqrt(uniform());
      return vector<double>{
         m_x_center + r * m_radius * cos(theta),
         m_y_center + r * m_radius * sin(theta)
      };
   }
};
main(){
   Solution ob(10, 5, 7);
   print_vector(ob.randPoint());
   print_vector(ob.randPoint());
   print_vector(ob.randPoint());
}

ইনপুট

Pass 10, 5, 7 into constructor
Call randPoint() three times

আউটপুট

[1.5441, 9.14912, ]
[-1.00029, 13.9072, ]
[10.2384, 6.49618, ]

  1. কিভাবে C++ এ লুপে বিভিন্ন র্যান্ডম সংখ্যা তৈরি করা যায়?

  2. C++ এ এলোমেলো সংখ্যা তৈরি

  3. ক্যারি মেথডের সাথে গুন ব্যবহার করে এলোমেলো সংখ্যা তৈরি করতে C++ প্রোগ্রাম

  4. এলোমেলো সংখ্যা তৈরি করতে C++ প্রোগ্রাম