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

C++ में मिड-पॉइंट लाइन जनरेशन एल्गोरिथम

एक रेखा दो बिंदुओं को जोड़ती है। यह ग्राफिक्स में एक बुनियादी तत्व है। एक रेखा खींचने के लिए, आपको दो बिंदुओं की आवश्यकता होती है, जिनके बीच आप एक स्क्रीन पर एक रेखा खींच सकते हैं और ग्राफिक्स के संदर्भ में हम बिंदुओं को पिक्सेल के रूप में संदर्भित करते हैं और प्रत्येक पिक्सेल पूर्णांक निर्देशांक से जुड़ा होता है। हमें (x1, y1) और (x2, y2) के रूप में पूर्णांक निर्देशांक दिए गए हैं, जहां, x1

तीन अलग-अलग एल्गोरिदम हैं जिनका उपयोग स्क्रीन पर लाइन जनरेशन करने के लिए किया जा रहा है और वे हैं -

  • डीडीए एल्गोरिथम

  • ब्रेसेनहैम की लाइन जनरेशन

  • मिड-पॉइंट एल्गोरिथम

मिड-पॉइंट एल्गोरिथम

मिड-पॉइंट लाइन एल्गोरिथम का उपयोग करके रेखा खींचने के चरण हैं-

  • वर्तमान स्थित बिंदुओं का उपयोग करके मध्य बिंदु की गणना करें अर्थात पूर्व(Xp+1, Yp) और उत्तर पूर्व(Xp+1, Yp+1) मध्य बिंदु (Xp+1, Yp+1/2) है।

  • अब, मध्य बिंदु स्क्रीन पर अगले निर्देशांक के लिए स्थान तय करेगा अर्थात

    • यदि मध्य बिंदु रेखा के ऊपर है, तो अगला निर्देशांक पूर्व में होगा।

    • यदि मध्य बिंदु रेखा के नीचे है, तो अगला निर्देशांक उत्तर पूर्व में होगा।

आइए इसके लिए विभिन्न इनपुट आउटपुट परिदृश्य देखें -

में - इंट x_1 =3, इंट y_1 =3, इंट x_2 =10, इंट y_2 =8

बाहर - लाइन जनरेशन एल्गोरिथम के माध्यम से मध्य-बिंदु हैं:3,3 4,4 5,5 6,5 7,6 8,7 9,7 10,8

स्पष्टीकरण - हमें निर्देशांक दिए गए हैं जैसे x_1 =3, x_2 =10, y_1 =3, y_2 =8. इसलिए, सबसे पहले dx =x_2 - x_1 को 10 - 3 =7 के रूप में और dy को y_2 - y_1 के रूप में परिकलित करना होगा। 8 - 3 =5 और फिर जांचें कि क्या डाई dx से कम है। अब d को 5 - (7/2) =2 के रूप में परिकलित करें। पहला बिंदु x_1 और y_1 होगा। उन्हें प्रिंट करें। अब, जबकि x_1

में - इंट x_1 =2, इंट y_1 =2, इंट x_2 =3, इंट y_2 =4

बाहर - लाइन जनरेशन एल्गोरिथम के माध्यम से मध्य-बिंदु हैं:2,2 3,3 3,4

स्पष्टीकरण - हमें x_1 =2, x_2 =2, y_1 =3, y_2 =4 के रूप में निर्देशांक दिए गए हैं। इसलिए, मिड-पॉइंट लाइन जेनरेशन एल्गोरिथम को लागू करके हम आउटपुट के रूप में सभी मिड-पॉइंट पिक्सल की गणना करेंगे।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

  • int x_1, int y_1, int x_2, int y_2 के रूप में इनपुट पूर्णांक अंक। लाइन जेनरेट करने के लिए फ़ंक्शन को Mid_Point(x_1, y_1, x_2, y_2) के रूप में कॉल करें।

  • समारोह के अंदर Mid_Point(x_1, y_1, x_2, y_2)

    • dx को x_2 - x_1 और dy को y_2 - y_1

      . के रूप में परिकलित करें
    • जाँच करें कि dy dx से कम या उसके बराबर है तो d को dy - (dx / 2) के रूप में सेट करें और first_pt को x_1 और सेकेंड_pt को y_1 पर सेट करें

    • पहला_पीटी और दूसरा_पार्ट प्रिंट करें।

    • प्रारंभ करें जबकि first_pt x_2 से कम है, फिर first_pt को 1 से बढ़ाएं और IF d 0 से कम जांचें, फिर d को d + dy ELSE पर सेट करें, d को d + (dy - dx) पर सेट करें और दूसरे_pt को 1 से बढ़ाएं। first_pt और second_pt प्रिंट करें ।

    • और अगर dx dy से कम है तो d को dx - (dy/2) पर सेट करें और first_pt को x_1 और सेकेंड_pt को y_1 पर सेट करें और first_pt और second_pt को प्रिंट करें।

    • y_2 से कम सेकंड_पार्ट WHILE प्रारंभ करें। WHILE के अंदर, thesecond_pt को 1 से बढ़ाएँ। IF d 0 से कम जाँचें और फिर d को d + dx पर सेट करें। ELSE, d से d + (dx - dy) और first_pt को 1 से बढ़ाएँ।

    • पहला_पीटी और दूसरा_पार्ट प्रिंट करें।

उदाहरण

#include<bits/stdc++.h>
using namespace std;

void Mid_Point(int x_1, int y_1, int x_2, int y_2){
   int dx = x_2 - x_1;
   int dy = y_2 - y_1;

   if(dy <= dx){
      int d = dy - (dx / 2);
      int first_pt = x_1;
      int second_pt = y_1;

      cout<< first_pt << "," << second_pt << "\n";
      while(first_pt < x_2){
         first_pt++;
         if(d < 0){
            d = d + dy;
         }
         else{
            d = d + (dy - dx);
            second_pt++;
         }
            cout << first_pt << "," << second_pt << "\n";
      }
   }
   else if(dx < dy){
      int d = dx - (dy/2);
      int first_pt = x_1;
      int second_pt = y_1;
      cout << first_pt << "," << second_pt << "\n";
      while(second_pt < y_2){
         second_pt++;
         if(d < 0){
            d = d + dx;
         }
         else{
            d += (dx - dy);
            first_pt++;
         }
         cout << first_pt << "," << second_pt << "\n";
      }
   }
}
int main(){
   int x_1 = 3;
   int y_1 = 3;
   int x_2 = 10;
   int y_2 = 8;
   cout<<"Mid-Points through Line Generation Algorithm are: ";
   Mid_Point(x_1, y_1, x_2, y_2);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा

Mid-Points through Line Generation Algorithm are: 3,3
4,4
5,5
6,5
7,6
8,7
9,7
10,8

  1. C++ में एक लाइन के मध्य-बिंदु को खोजने का प्रोग्राम

    इस समस्या में, हमें दो बिंदु A और B दिए गए हैं, जो एक रेखा के आरंभ और अंत बिंदु हैं। हमारा काम C++ में एक लाइन के मध्य-बिंदु को खोजने के लिए एक प्रोग्राम बनाना है। समस्या का विवरण - यहाँ, हमारे पास एक रेखा है जिसमें शुरुआती और अंत बिंदु A(x1, y1) और B(x2, y2) हैं। और हमें रेखा के मध्य-बिंदु को खोजन

  1. सी ++ में एक लाइन पर मैक्स पॉइंट्स

    मान लीजिए कि हमारे पास 2D प्लेन है। हमें एक ही सीधी रेखा पर रहने वाले बिंदुओं की अधिकतम संख्या ज्ञात करनी है। तो अगर अंक इस तरह हैं - फिर 4 अंक होते हैं इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - n :=अंकों की संख्या, यदि n <3 है, तो n लौटाएं उत्तर :=2 मैं के लिए 1 से n - 1 की सीमा

  1. सी ++ में बेलमैन फोर्ड एल्गोरिदम?

    बेलमैन फोर्ड एल्गोरिथम गतिशील प्रोग्रामिंग एल्गोरिथम है जिसका उपयोग किसी भी शीर्ष के सबसे छोटे पथ को खोजने के लिए किया जाता है, जिसे शुरुआती शीर्ष के रूप में माना जाता है। यह एल्गोरिथ्म पुनरावृत्त विधि का अनुसरण करता है और लगातार सबसे छोटा पथ खोजने का प्रयास करता है। भारित ग्राफ़ पर बेलमैन फोर्ड एल्