Computer >> Máy Tính >  >> Lập trình >> C ++

Thuật toán tạo dòng giữa điểm trong C ++

Một đường nối hai điểm. Nó là một yếu tố cơ bản trong đồ họa. Để vẽ một đường thẳng, bạn cần hai điểm mà giữa đó bạn có thể vẽ một đường trên màn hình và về mặt đồ họa, chúng tôi gọi các điểm là pixel và mọi pixel được liên kết với tọa độ số nguyên. Chúng ta được cung cấp các tọa độ nguyên ở dạng (x1, y1) và (x2, y2) trong đó, x1

Có ba thuật toán khác nhau đang được sử dụng để thực hiện tạo Dòng trên màn hình và đó là -

  • Thuật toán DDA

  • Bresenham’s Line Generation

  • Thuật toán điểm giữa

Thuật toán điểm giữa

Các bước để vẽ đường bằng Thuật toán Đường giữa Điểm là-

  • Tính điểm giữa bằng cách sử dụng các điểm được định vị hiện tại, tức là Đông (Xp + 1, Yp) và Đông Bắc (Xp + 1, Yp + 1) là Trung điểm (Xp + 1, Yp + 1/2).

  • Bây giờ, Điểm giữa sẽ quyết định vị trí cho tọa độ tiếp theo trên màn hình, tức là

    • NẾU điểm giữa nằm trên đường thẳng, thì tọa độ tiếp theo sẽ ở EAST.

    • NẾU điểm giữa nằm dưới đường thẳng, thì tọa độ tiếp theo sẽ ở ĐÔNG BẮC.

Hãy cho chúng tôi xem các tình huống đầu ra đầu vào khác nhau cho việc này -

Trong - int x_1 =3, int y_1 =3, int x_2 =10, int y_2 =8

Hết - Điểm giữa thông qua Thuật toán tạo dòng là:3,3 4,4 5,5 6,5 7,6 8,7 9,7 10,8

Giải thích - chúng ta được cung cấp với các tọa độ là x_1 =3, x_2 =10, y_1 =3, y_2 =8. Vì vậy, các bước đầu tiên sẽ là tính dx =x_2 - x_1 là 10 - 3 =7 và dy là y_2 - y_1 là 8 - 3 =5 và sau đó kiểm tra xem dy có nhỏ hơn dx hay không. Bây giờ hãy tính d là 5 - (7/2) =2. Điểm đầu tiên sẽ là x_1 và y_1. In chúng. Bây giờ, trong khi x_1

Trong - int x_1 =2, int y_1 =2, int x_2 =3, int y_2 =4

Hết - Các điểm giữa thông qua Thuật toán tạo dòng là:2,2 3,3 3,4

Giải thích - chúng tôi được cung cấp với các tọa độ là x_1 =2, x_2 =2, y_1 =3, y_2 =4. Vì vậy, bằng cách áp dụng thuật toán tạo đường giữa điểm, chúng tôi sẽ tính toán tất cả các pixel ở giữa làm đầu ra.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập các điểm số nguyên dưới dạng int x_1, int y_1, int x_2, int y_2. Gọi hàm dưới dạng Mid_Point (x_1, y_1, x_2, y_2) để tạo dòng.

  • Bên trong hàm Mid_Point (x_1, y_1, x_2, y_2)

    • Tính dx dưới dạng x_2 - x_1 và dy là y_2 - y_1

    • Kiểm tra NẾU dy nhỏ hơn hoặc bằng dx, sau đó đặt d là dy - (dx / 2) và đặt first_pt thành x_1 và second_pt thành y_1

    • In first_pt và second_pt.

    • Bắt đầu khi first_pt nhỏ hơn x_2, sau đó tăng first_pt lên 1 và kiểm tra IF d nhỏ hơn 0 rồi đặt d thành d + dy ELSE, đặt d thành d + (dy - dx) và tăng second_pt lên 1. In first_pt và second_pt .

    • Khác Nếu dx nhỏ hơn dy thì đặt d thành dx - (dy / 2) và đặt first_pt thành x_1 và second_pt thành y_1 và in first_pt và second_pt.

    • Bắt đầu WHILE second_pt ít hơn y_2. Bên trong WHILE, tăng thesecond_pt lên 1. Kiểm tra IF d nhỏ hơn 0 rồi đặt d thành d + dx. ELSE, d đến d + (dx - dy) và tăng first_pt lên 1.

    • In first_pt và second_pt.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

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