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

C++ में कोणीय स्वीप एल्गोरिथम

किसी दिए गए त्रिज्या के एक सर्कल में संलग्न किए जा सकने वाले बिंदुओं की अधिकतम संख्या को खोजने के लिए एल्गोरिदम। इसका मतलब यह है कि त्रिज्या r के एक वृत्त और 2-डी बिंदुओं के दिए गए सेट के लिए, हमें वृत्त द्वारा संलग्न बिंदुओं की अधिकतम संख्या ज्ञात करनी होगी (वृत्त के अंदर इसके किनारों पर नहीं)।

के लिए, यह सबसे प्रभावी तरीका है कोणीय स्वीप एल्गोरिथ्म।

एल्गोरिदम

  • n . हैं सी<उप>2 समस्या में दिए गए बिंदुओं के लिए, हमें इनमें से प्रत्येक बिंदु के बीच की दूरी ज्ञात करनी होगी।

  • एक मनमाना बिंदु लें और उस बिंदु के बारे में घुमाए जाने पर वृत्त में पड़े अधिकतम अंक प्राप्त करें P

  • समस्या के अंतिम वापसी मूल्य के रूप में संलग्न किए जा सकने वाले अंकों की अधिकतम संख्या लौटाना।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
#define MAX_POINTS 500
typedef complex<double> Point;
Point arr[MAX_POINTS];
double dis[MAX_POINTS][MAX_POINTS];
int getPointsInside(int i, double r, int n) {
   vector <pair<double, bool> > angles;
   for (int j = 0; j < n; j++) {
      if (i != j && dis[i][j] <= 2*r) {
         double B = acos(dis[i][j]/(2*r));
         double A = arg(arr[j]-arr[i]);
         double alpha = A-B;
         double beta = A+B;
         angles.push_back(make_pair(alpha, true));
         angles.push_back(make_pair(beta, false));
      }
   }
   sort(angles.begin(), angles.end());
   int count = 1, res = 1;
   vector <pair<double, bool>>::iterator it;
   for (it=angles.begin(); it!=angles.end(); ++it) {
      if ((*it).second)
         count++;
      else
         count--;
      if (count > res)
         res = count;
   }
   return res;
}
int maxPoints(Point arr[], int n, int r) {
   for (int i = 0; i < n-1; i++)
      for (int j=i+1; j < n; j++)
         dis[i][j] = dis[j][i] = abs(arr[i]-arr[j]);
      int ans = 0;
      for (int i = 0; i < n; i++)
         ans = max(ans, getPointsInside(i, r, n));
      return ans;
}
int main() {
   Point arr[] = {Point(6.47634, 7.69628), Point(5.16828, 4.79915), Point(6.69533, 6.20378)};
   int r = 1;
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "The maximum number of points are: " << maxPoints(arr, n, r);
   return 0;
}

आउटपुट

The maximum number of points are: 2

  1. C++ में कंप्यूटर ग्राफिक्स में प्वाइंट क्लिपिंग एल्गोरिथम

    कंप्यूटर ग्राफिक्स कंप्यूटर स्क्रीन पर छवियों और ग्राफिक्स को चित्रित करने से संबंधित है। यहां, हम स्क्रीन को 2-डी समन्वय प्रणाली के रूप में देखते हैं। यह समन्वय प्रणाली ऊपर-बाएँ (0,0) से शुरू होती है और नीचे-दाएँ पर समाप्त होती है। विमान देखना कंप्यूटर ग्राफिक्स में ग्राफिक्स बनाने के लिए परिभाषित

  1. सी ++ प्रोग्राम निकटतम पड़ोसी एल्गोरिदम को लागू करने के लिए

    यह निकटतम नेबर एल्गोरिथम को लागू करने के लिए एक C++ प्रोग्राम है, जिसका उपयोग ट्रैवलिंग सेल्समैन की समस्या को लागू करने के लिए किया जाता है, ताकि केवल एक बार किनारों को पार करके सभी नोड्स पर जाने के लिए आवश्यक न्यूनतम लागत की गणना की जा सके। आवश्यक कार्य और छद्म कोड एल्गोरिदम Begin    Init

  1. विस्तारित यूक्लिडियन एल्गोरिथम को लागू करने के लिए C++ कार्यक्रम

    विस्तारित यूक्लिडियन एल्गोरिथम दो संख्याओं के GCD की गणना करने का एक और तरीका है। इसमें ax + by =gcd(a, b) की गणना करने के लिए अतिरिक्त चर हैं। यह कंप्यूटर प्रोग्राम में उपयोग करने के लिए अधिक कुशल है एल्गोरिदम Begin Declare variable a, b, x and y gcdExtended(int a, int b, int *x, int *y) i