선은 두 점을 연결합니다. 그래픽의 기본 요소입니다. 선을 그리려면 화면에 선을 그릴 수 있는 두 점이 필요하며 그래픽 측면에서 점을 픽셀이라고 하며 모든 픽셀은 정수 좌표와 연결되어 있습니다. (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