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