목차
1. Bresenham line 알고리즘
(1) 알고리즘 구현
(2) 실행결과
(3) 문제점
2. 책에 있는 방식으로(c언어로=txt만 출력하겠끔)
(1) 소스
(2) 실행결과
3. 비쥬얼 베이직방식으로
(1) 알고리즘 구현
(2) 실행결과
(3) 문제점
(1) 알고리즘 구현
(2) 실행결과
(3) 문제점
2. 책에 있는 방식으로(c언어로=txt만 출력하겠끔)
(1) 소스
(2) 실행결과
3. 비쥬얼 베이직방식으로
(1) 알고리즘 구현
(2) 실행결과
(3) 문제점
본문내용
2 && y1
{
pk = pk+c2;
x1=x1+1;
y1=y1+1;
}
printf("%d\t %d\t %d\t %d\n",k,pk,x1,y1);
}
return 0;
}
비쥬얼 베이직방식으로
(1) 소스코드
'------- Bresenham line ----------------
//'점찍는 명령어를 찾을 수 없어서.. 동그라미(circle)명령어를 사용
/동그라미의 원주크기를 작게 하여 점처럼 보이게 했다.
Dim x1, x2, y1, y2, dx, dy, p As Integer
Dim twody, twodydx, x, y, xEnd As Integer
Private Sub Command1_Click()
x1 = Val(Text1.Text) ' 시작점 좌표와 끝점 좌표를 읽어
y1 = Val(Text2.Text) ' 읽어 온다.
x2 = Val(Text3.Text) ' val() 은문자를 숫자 형으로
y2 = Val(Text4.Text) ' 바꾸어주는 명령어 이다.
'-----------------------------------------------
dx = Abs(x1 - x2) ' dx = x좌표의 이동거리의 절대값
dy = Abs(y1 - y2) ' dy = y좌표의 이동거리의 절대값
p = 2 * dx - dy
twody = 2 * dy
twodydx = 2 * (dy - dx)
If (x1 > x2) Then '처음 좌표가 두번째 좌표보다 클때
x = x2
y = y2
xEnd = x1
Else '두번째 좌표가 크거나 같을때
x = x1
y = y1
xEnd = x2
End If
Circle (x, y), 5, QBColor(1) '처음 시작점을찍고
Form1.DrawWidth = 1 '점의 굵기를 지정해줌
While (x < xEnd) 'x좌표를 하나씩 증가시키며
x = x + 1 'x좌표가 끝날때까지 반복
If (p < 0) Then
p = p + twody
Else
y = y + 1
p = p + twodydx
End If
Circle (x, y), 5, QBColor(1) '점을 찍음
Wend
End Sub
(2) 실행결과
이상하게 비주얼 베이직에선 좌표 값을 크게 입력해야 했다.
오른쪽 그림은 값을 달리 해서 입력해 보았다
(3) 문제점
1. 직각으로 좌표를 입력했을 경우 선은 그려지지 않았다.
2. X의 증가 값보다 Y의 증가 값이 클 경우 선은 정확히 그려지지 않았다.
pk = pk+c2;
x1=x1+1;
y1=y1+1;
}
printf("%d\t %d\t %d\t %d\n",k,pk,x1,y1);
}
return 0;
}
비쥬얼 베이직방식으로
(1) 소스코드
'------- Bresenham line ----------------
//'점찍는 명령어를 찾을 수 없어서.. 동그라미(circle)명령어를 사용
/동그라미의 원주크기를 작게 하여 점처럼 보이게 했다.
Dim x1, x2, y1, y2, dx, dy, p As Integer
Dim twody, twodydx, x, y, xEnd As Integer
Private Sub Command1_Click()
x1 = Val(Text1.Text) ' 시작점 좌표와 끝점 좌표를 읽어
y1 = Val(Text2.Text) ' 읽어 온다.
x2 = Val(Text3.Text) ' val() 은문자를 숫자 형으로
y2 = Val(Text4.Text) ' 바꾸어주는 명령어 이다.
'-----------------------------------------------
dx = Abs(x1 - x2) ' dx = x좌표의 이동거리의 절대값
dy = Abs(y1 - y2) ' dy = y좌표의 이동거리의 절대값
p = 2 * dx - dy
twody = 2 * dy
twodydx = 2 * (dy - dx)
If (x1 > x2) Then '처음 좌표가 두번째 좌표보다 클때
x = x2
y = y2
xEnd = x1
Else '두번째 좌표가 크거나 같을때
x = x1
y = y1
xEnd = x2
End If
Circle (x, y), 5, QBColor(1) '처음 시작점을찍고
Form1.DrawWidth = 1 '점의 굵기를 지정해줌
While (x < xEnd) 'x좌표를 하나씩 증가시키며
x = x + 1 'x좌표가 끝날때까지 반복
If (p < 0) Then
p = p + twody
Else
y = y + 1
p = p + twodydx
End If
Circle (x, y), 5, QBColor(1) '점을 찍음
Wend
End Sub
(2) 실행결과
이상하게 비주얼 베이직에선 좌표 값을 크게 입력해야 했다.
오른쪽 그림은 값을 달리 해서 입력해 보았다
(3) 문제점
1. 직각으로 좌표를 입력했을 경우 선은 그려지지 않았다.
2. X의 증가 값보다 Y의 증가 값이 클 경우 선은 정확히 그려지지 않았다.