Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 중간점 선 생성 알고리즘

<시간/>

선은 두 점을 연결합니다. 그래픽의 기본 요소입니다. 선을 그리려면 화면에 선을 그릴 수 있는 두 점이 필요하며 그래픽 측면에서 점을 픽셀이라고 하며 모든 픽셀은 정수 좌표와 연결되어 있습니다. (x1, y1) 및 (x2, y2) 형식의 정수 좌표가 주어집니다. 여기서 x1

화면에서 라인 생성을 수행하는 데 사용되는 세 가지 알고리즘이 있으며 다음은 -

  • DDA 알고리즘

  • Bresenham의 라인 생성

  • 중간점 알고리즘

중간점 알고리즘

중간점 선 알고리즘을 사용하여 선을 그리는 단계는-

  • 현재 위치한 점을 이용하여 중간점을 계산합니다. 즉, 동쪽(Xp+1, Yp)과 북동쪽(Xp+1, Yp+1)은 중간점(Xp+1, Yp+1/2)입니다.

  • 이제 중간점이 화면의 다음 좌표 위치를 결정합니다. 즉,

    • 중간점이 선 위에 있으면 다음 좌표는 EAST가 됩니다.

    • 중간 지점이 선 아래에 있으면 다음 좌표는 NORTH EAST가 됩니다.

이에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다. -

에서 - 정수 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 그리고 dy가 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로, second_pt를 y_1로 설정

    • first_pt와 second_pt를 인쇄합니다.

    • first_pt가 x_2보다 작은 동안 시작한 다음 first_pt를 1씩 증가시키고 IF d가 0보다 작은지 확인한 다음 d를 d + dy ELSE로 설정하고 d를 d + (dy - dx)로 설정하고 second_pt를 1만큼 증가시킵니다. first_pt와 second_pt를 인쇄합니다. .

    • 그렇지 않으면 dx가 dy보다 작으면 d를 dx - (dy/2)로 설정하고 first_pt를 x_1로, second_pt를 y_1로 설정하고 first_pt와 second_pt를 인쇄합니다.

    • WHILE second_pt를 y_2보다 작게 시작합니다. WHILE 내부에서 thesecond_pt를 1만큼 증가시킵니다. IF d가 0보다 작은지 확인한 다음 d를 d + dx로 설정합니다. ELSE, d를 d + (dx - dy)로 변경하고 first_pt를 1씩 증가시킵니다.

    • first_pt와 second_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