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