Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में एक सर्कल में रैंडम पॉइंट जेनरेट करें

मान लीजिए कि हमारे पास एक सर्कल के केंद्र की त्रिज्या और एक्स-वाई स्थिति है, हमें रैंडपॉइंट () नामक एक फ़ंक्शन लिखना है जो सर्कल में एक समान यादृच्छिक बिंदु उत्पन्न करता है। तो कुछ महत्वपूर्ण बिंदु होंगे जिन्हें हमें ध्यान में रखना होगा -

  • इनपुट और आउटपुट मान फ़्लोटिंग-पॉइंट में हैं।
  • वृत्त के केंद्र की त्रिज्या और xy स्थिति को क्लास कंस्ट्रक्टर में पास किया जाता है।
  • वृत्त की परिधि पर एक बिंदु को वृत्त में माना जाता है।
  • रैंडपॉइंट() उस क्रम में यादृच्छिक बिंदु की x-स्थिति और y-स्थिति देता है।

तो अगर इनपुट [10, 5,-7.5] की तरह है, तो यह [11.15792,-8.54781], [2.49851,-16.27854], [11.16325,-12.45479] जैसे कुछ यादृच्छिक अंक उत्पन्न कर सकता है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • यूनिफ़ॉर्म () नामक एक विधि को परिभाषित करें। यह इस प्रकार काम करेगा -
  • रैंडम_नंबर/मैक्स रैंडम लौटाएं
  • इनिशियलाइज़र के माध्यम से रेड को इनिशियलाइज़ करें, और सेंटर कोऑर्डिनेट करें
  • रैंडप्वाइंट इस प्रकार काम करेगा -
  • थीटा =2*पाई*वर्दी ()
  • 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++ में रैंडम नंबर जेनरेशन

    आइए देखें कि C++ का उपयोग करके यादृच्छिक संख्याएँ कैसे उत्पन्न करें। यहां हम 0 से कुछ मान तक एक यादृच्छिक संख्या उत्पन्न कर रहे हैं। (इस कार्यक्रम में अधिकतम मूल्य 100 है)। इस ऑपरेशन को करने के लिए हम srand () फ़ंक्शन का उपयोग कर रहे हैं। यह सी लाइब्रेरी में है। फ़ंक्शन void srand(unsigned int Seed

  1. C++ प्रोग्राम कैरी मेथड के साथ गुणा का उपयोग करके रैंडम नंबर जेनरेट करने के लिए

    मल्टीप्ली-विद-कैरी विधि मार्सग्लिया और ज़मान (1991) द्वारा पेश किए गए ऐड-विद-कैरी जनरेटर का एक प्रकार है। इस पद्धति का मुख्य लाभ यह है कि यह सरल कंप्यूटर पूर्णांक अंकगणित को आमंत्रित करता है और लगभग 260 से 22000000 तक की विशाल अवधि के साथ यादृच्छिक संख्याओं के अनुक्रमों की बहुत तेज़ पीढ़ी की ओर जाता

  1. C++ प्रोग्राम यादृच्छिक संख्या उत्पन्न करने के लिए

    आइए देखें कि C++ का उपयोग करके यादृच्छिक संख्याएँ कैसे उत्पन्न करें। यहां हम 0 से कुछ मान में एक यादृच्छिक संख्या उत्पन्न कर रहे हैं। (इस कार्यक्रम में अधिकतम मूल्य 100 है)। इस ऑपरेशन को करने के लिए हम srand () फ़ंक्शन का उपयोग कर रहे हैं। यह सी लाइब्रेरी में है। फ़ंक्शन void srand(unsigned int See