수색…


소개

선 그리기는 두 개의 지정된 끝점 위치 사이의 선 경로를 따라 중간 위치를 계산하여 수행됩니다. 그런 다음 출력 장치가 끝점 사이의 위치를 ​​채우도록 지시됩니다.

Bresenham 선 그리기 알고리즘

배경 이론 : Bresenham의 선 그리기 알고리즘은 Bresenham이 개발 한 효율적이고 정확한 래스터 선 생성 알고리즘입니다. 정수 계산 만하므로 정확하고 빠릅니다. 원을 다른 커브로 표시하도록 확장 할 수도 있습니다.

Bresenham 선 그리기 알고리즘 :

기울기 | m | <1 :
x의 값이 증가합니다.
또는 x와 y 모두 결정 매개 변수를 사용하여 증가됩니다.

기울기 | m |> 1 :
y 값이 증가합니다.
또는 x와 y 모두 결정 매개 변수를 사용하여 증가됩니다.

기울기에 대한 알고리즘 | m | <1 :

  1. 선의 두 끝점 (x1, y1)과 (x2, y2)를 입력하십시오.

  2. 첫 번째 점 (x1, y1)을 플롯합니다.

  3. 계산하다
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |

  4. 초기 결정 매개 변수를 다음과 같이 얻습니다.
    P = 2 * dely - delx

  5. I = 0에서 delx까지 1의 단계에서

    p <0의 경우
    X1 = x1 + 1
    포트 (x1, y1)
    P = p + 2 dely

    그밖에
    X1 = x1 + 1
    Y1 = y1 + 1
    플롯 (x1, y1)
    P = p + 2
    dely - 2 * delx

    끝내기 if


  6. 종료

소스 코드:

/* A C program to implement Bresenham line drawing algorithm for |m|<1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>

int main()
{    
 int gdriver=DETECT,gmode;
 int x1,y1,x2,y2,delx,dely,p,i;
 initgraph(&gdriver,&gmode,"c:\\TC\\BGI");

printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);

putpixel(x1,y1,RED);

delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*dely)-delx;
for(i=0;i<delx;i++){
if(p<0)
{
 x1=x1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely);
}
else
{
 x1=x1+1;
 y1=y1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely)-(2*delx);
}
}
 getch();
 closegraph();
 return 0;
}

기울기에 대한 알고리즘 | m |> 1 :

  1. 선의 두 끝점 (x1, y1)과 (x2, y2)를 입력하십시오.
  2. 첫 번째 점 (x1, y1)을 플롯합니다.
  3. 계산하다
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |
  4. 초기 결정 매개 변수를 다음과 같이 얻습니다.
    P = 2 * delx - dely
  5. I = 0 ~ 1 단계에서 dely

    p <0의 경우
    y1 = y1 + 1
    포트 (x1, y1)
    P = p + 2 delx

    그밖에
    X1 = x1 + 1
    Y1 = y1 + 1
    플롯 (x1, y1)
    P = p + 2
    delx - 2 * dely

    끝내기 if



  6. 종료

소스 코드:

/* A C program to implement Bresenham line drawing algorithm for |m|>1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int main()
{
int gdriver=DETECT,gmode;
int x1,y1,x2,y2,delx,dely,p,i;
initgraph(&gdriver,&gmode,"c:\\TC\\BGI");
printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);
putpixel(x1,y1,RED);
delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*delx)-dely;
for(i=0;i<delx;i++){
if(p<0)
{
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx);
}
else
{
x1=x1+1;
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx)-(2*dely);
}
}
getch();
closegraph();
 return 0;
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow