⚫ 양 끝점이 주어진 라인의 래스터화
- Bresenham(Midpoint) Algorithm 이라고 한다.
시작점 (𝑥𝑠, 𝑦𝑠) 과 끝점 (𝑥𝑒, 𝑦𝑒) → Δ𝑥 = 𝑥𝑒 − 𝑥𝑠, Δ𝑦 = 𝑦𝑒 − 𝑦s
기울기 0 ≤ 𝑚 (=Δ𝑦/Δ𝑥)≤ 1을 가정하고, 𝑥좌표를 1씩 증가
현재 위치: (𝑥𝑘, 𝑦𝑘)
다음 위치: (𝑥𝑘 + 1, 𝑦𝑘) 또는 (𝑥𝑘 + 1, 𝑦𝑘 + 1)
직선 𝑦 = 𝑚𝑥 + 𝑏 의 음함수 표현, 𝑓 (𝑥, 𝑦) = 𝑚𝑥 − 𝑦 + 𝑏, 여기서 𝑚 =Δ𝑦/Δ𝑥
𝑓 (𝑥, 𝑦) > 0: 점 𝑥, 𝑦 는 직선 아래 존재
𝑓 (𝑥, 𝑦) = 0: 점 𝑥, 𝑦 는 직선 상에 존재
𝑓 (𝑥, 𝑦) < 0: 점 𝑥, 𝑦 는 직선 위에 존재
• 𝑓 (𝑥𝑘 + 1, 𝑦𝑘 + 0.5) ≤ 0 -> (𝑥𝑘 + 1, 𝑦𝑘) 선택
• 𝑓 (𝑥𝑘 + 1, 𝑦𝑘 + 0.5) > 0 -> (𝑥𝑘 + 1, 𝑦𝑘 + 1) 선택
• 𝑓 (𝑥𝑘 + 1, 𝑦𝑘 + 0.5) ≤ 0 라면 중간점이 직선의 위에 있는 것이므로 (𝑥𝑘 + 1, 𝑦𝑘)인 회색을 고를 것이다. 따라서 y의 위치는 변하지 않는다. (❗ 위의 그림 참고)
• 𝑓 (𝑥𝑘 + 1, 𝑦𝑘 + 0.5) > 0 라면 중간점이 직선의 아래에 있는 것이므로 (𝑥𝑘 + 1, 𝑦𝑘 + 1)인 노란색을 고를 것이다. 따라서 x와 y의 위치가 둘 다 변한다. (❗ 아래 그림 참고)
초기 판별식 𝑑0 = ?
𝑓 𝑥, 𝑦 = Δ𝑦/Δ𝑥 * 𝑥 − 𝑦 + 𝑏
𝑑0 = 2Δ𝑥𝑓(𝑥0 + 1, 𝑦0 + 0.5)
= 2Δ𝑥{Δ𝑦/Δ𝑥 (𝑥0 + 1) − (𝑦0 + 0.5) + 𝑏}
= 2Δ𝑥{Δ𝑦Δ𝑥 * 𝑥0 − 𝑦0 + 𝑏 +Δ𝑦/Δ𝑥 − 0.5
= 2Δ𝑦 − Δ𝑥
𝑑𝑘로 부터 𝑑𝑘+1을 계산할 수 없을까?
• 𝑑𝑘 = 2Δ𝑦(𝑥𝑘 + 1) − 2Δ𝑥𝑦𝑘 − Δ𝑥 + 2Δ𝑥�Case 1: 𝑑𝑘 ≤ 0
𝑑𝑘+1 = 2Δ𝑥𝑓 𝑥𝑘 + 2, 𝑦𝑘 + 0.5
= 2Δ𝑥{Δ𝑦/Δ𝑥 (𝑥𝑘 + 2) − (𝑦𝑘 + 0.5) + 𝑏}
= 2Δ𝑦 (𝑥𝑘 + 1) − 2Δ𝑥𝑦𝑘 − Δ𝑥 + 2Δ𝑥𝑏 + 2Δ𝑦
= 𝑑𝑘 + 2Δ𝑦Case 2: 𝑑𝑘 > 0
𝑑𝑘+1 = 2Δ𝑥𝑓 𝑥𝑘 + 2, 𝑦𝑘 + 1.5
= 2Δ𝑥{Δ𝑦/Δ𝑥 (𝑥𝑘 + 2) − (𝑦𝑘 + 1.5) + 𝑏}
= 2Δ𝑦 (𝑥𝑘 + 1) − 2Δ𝑥𝑦𝑘 − Δ𝑥 + 2Δ𝑥𝑏 + 2Δ𝑦 − 2Δ𝑥
= 𝑑𝑘 + 2Δ𝑦 − 2Δ𝑥
• 입력: 시작점(𝑥𝑠, 𝑦𝑠) 끝점(𝑥𝑒, 𝑦𝑒) (0 < 𝑚 < 1)