>백엔드 개발 >C++ >중간점 라인 생성 알고리즘의 C++ 구현

중간점 라인 생성 알고리즘의 C++ 구현

王林
王林앞으로
2023-09-09 19:49:101190검색

중간점 라인 생성 알고리즘의 C++ 구현

선은 두 점을 연결합니다. 그래픽의 기본 요소입니다. 선을 그리려면 두 점이 필요하고 화면에서 이 두 점 사이에 선을 그립니다. 그래픽 측면에서 우리는 이 점을 픽셀이라고 부르며 각 픽셀은 정수 좌표와 연결됩니다. x1

세 가지 다른 알고리즘이 화면상에서 사용됩니다. 선 생성, 이것들은-

  • DDA Algorithm

  • Bresenham Line Generation

  • Midpoint Algorithm

Midpoint Algorithm

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

  • 현재 앵커 포인트를 사용하여 중간점을 계산합니다. 즉 동쪽(Xp+1, Yp)과 북동쪽(Xp+1, Yp) +1)이 중간점(Xp+1, Yp+1/2)입니다.

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

    • 중간점이 선 위에 있으면 다음 좌표는 동쪽에 있게 됩니다.

    • 중간점이 선 아래에 있으면 다음 좌표는 북동쪽이 됩니다.

다양한 입력 및 출력 시나리오를 살펴보겠습니다.

input− int x_1 = 3, int y_1 = 3, int x_2 = 10, int y_2 = 8

output

output

강하다 >− 선 생성 알고리즘의 중간점은 다음과 같습니다: 3,3 4,4 5,5 6,5 7,6 8,7 9,7 10,8

Explanation− 우리가 제공하는 좌표는 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입니다. 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

    • IF dy가 dx보다 작거나 같은지 확인한 다음 설정합니다. d를 dy - (dx/2)로 설정하고 first_pt를 x_1로 설정하고 second_pt를 y_1

    • first_pt 및 second_pt로 인쇄합니다.

    • first_pt가 x_2보다 작을 때 while 루프를 시작하고 first_pt를 1로 늘리고 d가 0보다 작은지 확인한 다음 d를 d + dy로 설정하고, 그렇지 않으면 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보다 작으면 루프 내에서 second_pt를 증가시킵니다. second_pt는 1씩 증가합니다. d가 0보다 작은지 확인하고 d를 d + dx로 설정합니다. 그렇지 않으면 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;
}

Output

위 코드를 실행하면 다음과 같은 출력이 생성됩니다

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

위 내용은 중간점 라인 생성 알고리즘의 C++ 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제