কম্পিউটার

C++ এ মিড-পয়েন্ট লাইন জেনারেশন অ্যালগরিদম


একটি লাইন দুটি বিন্দুকে সংযুক্ত করে। এটি গ্রাফিক্সের একটি মৌলিক উপাদান। একটি লাইন আঁকতে, আপনার দুটি বিন্দুর প্রয়োজন যার মধ্যে আপনি একটি স্ক্রিনে একটি রেখা আঁকতে পারেন এবং গ্রাফিক্সের পরিপ্রেক্ষিতে আমরা পয়েন্টগুলিকে পিক্সেল হিসাবে উল্লেখ করি এবং প্রতিটি পিক্সেল পূর্ণসংখ্যা স্থানাঙ্কের সাথে যুক্ত। আমাদেরকে (x1, y1) এবং (x2, y2) আকারে পূর্ণসংখ্যা স্থানাঙ্ক দেওয়া হয়েছে যেখানে, x1

তিনটি আলাদা অ্যালগরিদম আছে যা একটি স্ক্রিনে লাইন জেনারেশন করার জন্য ব্যবহার করা হচ্ছে এবং সেগুলো হল −

  • DDA অ্যালগরিদম

  • ব্রেসেনহামের লাইন জেনারেশন

  • মিড-পয়েন্ট অ্যালগরিদম

মিড-পয়েন্ট অ্যালগরিদম

মিড-পয়েন্ট লাইন অ্যালগরিদম ব্যবহার করে লাইন আঁকার ধাপগুলো হল-

  • বর্তমান অবস্থিত বিন্দু যেমন পূর্ব (Xp+1, Yp) এবং উত্তর পূর্ব (Xp+1, Yp+1) হল মধ্যবিন্দু (Xp+1, Yp+1/2) ব্যবহার করে মধ্যবিন্দু গণনা করুন।

  • এখন, মধ্যবিন্দু স্ক্রিনে পরবর্তী স্থানাঙ্কের জন্য অবস্থান নির্ধারণ করবে অর্থাৎ

    • যদি মধ্যবিন্দুটি লাইনের উপরে থাকে, তাহলে পরবর্তী স্থানাঙ্কটি হবে পূর্বদিকে৷

    • যদি মধ্যবিন্দুটি লাইনের নিচে থাকে, তাহলে পরবর্তী স্থানাঙ্কটি হবে উত্তর পূর্বে।

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

− int x_1 =3, int y_1 =3, int x_2 =10, int 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 এবং তারপর dy dx থেকে কম কিনা তা পরীক্ষা করুন। এখন d কে 5 - (7 / 2) =2 হিসাবে গণনা করুন। প্রথম বিন্দুটি হবে x_1 এবং y_1। তাদের প্রিন্ট করুন। এখন, যখন x_1

− int x_1 =2, int y_1 =2, int x_2 =3, int 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 হিসাবে পূর্ণসংখ্যা পয়েন্ট ইনপুট করুন। লাইন তৈরি করতে ফাংশনটিকে মিড_পয়েন্ট(x_1, y_1, x_2, y_2) হিসাবে কল করুন।

  • মিড_পয়েন্ট ফাংশনের ভিতরে(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 এ সেট করুন

    • প্রথম_pt এবং দ্বিতীয়_pt প্রিন্ট করুন।

    • x_2 থেকে first_pt কম থাকাকালীন শুরু করুন তারপর first_pt 1 দ্বারা বৃদ্ধি করুন এবং IF d 0 এর কম হলে d + dy ELSE তে সেট করুন, d তে d + (dy - dx) সেট করুন এবং দ্বিতীয়_pt 1 দ্বারা বৃদ্ধি করুন। first_pt এবং দ্বিতীয়_pt প্রিন্ট করুন .

    • অন্যথায় dx dy-এর থেকে কম হলে d-এ dx - (dy/2) সেট করুন এবং first_pt-এ x_1 এবং দ্বিতীয়_pt-এ y_1 সেট করুন এবং first_pt এবং দ্বিতীয়_pt প্রিন্ট করুন।

    • শুরু করুন WHILE second_pt কম y_2 থেকে। WHILE এর ভিতরে, thesecond_pt 1 দ্বারা বৃদ্ধি করুন। IF d 0 এর কম চেক করুন তারপর d এ d + dx সেট করুন। ELSE, d থেকে d + (dx - dy) এবং প্রথম_pt 1 দ্বারা বৃদ্ধি করুন।

    • প্রথম_pt এবং দ্বিতীয়_pt প্রিন্ট করুন।

উদাহরণ

#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/C++ এ বার্কলের অ্যালগরিদম

  2. C++ এ একটি লাইনের মধ্যবিন্দু খুঁজে বের করার জন্য প্রোগ্রাম

  3. C++ এ একটি লাইনে সর্বোচ্চ পয়েন্ট

  4. C++ এ বেলম্যান ফোর্ড অ্যালগরিদম?