브레젠험 직선·원 래스터화 계산기
두 점을 잇는 픽셀을 정수 덧셈만으로 고르는 브레젠험 알고리즘을 그림과 단계 표로 보여줍니다. 오차항이 어떻게 갱신되는지, 실수로 계산해 반올림한 결과와 어디가 같고 어디가 다른지 나란히 확인할 수 있습니다.
찍은 픽셀
15개
가로 14칸, 세로 6칸을 지나는 완만한 선입니다. 픽셀 수는 언제나 둘 중 큰 값에 1을 더한 만큼입니다.
격자에 찍힌 픽셀
파란 칸이 브레젠험이 고른 픽셀입니다. 가는 선은 실제 직선이고, 흐린 칸은 실수로 계산해 반올림했을 때만 찍히는 자리입니다.
오차항이 움직이는 과정
| # | 픽셀 | 오차항 err | 다음 이동 |
|---|---|---|---|
| 0 | (0, 0) | 8 | x |
| 1 | (1, 0) | 2 | 대각선 |
| 2 | (2, 1) | 10 | x |
| 3 | (3, 1) | 4 | 대각선 |
| 4 | (4, 2) | 12 | x |
| 5 | (5, 2) | 6 | 대각선 |
| 6 | (6, 3) | 14 | x |
| 7 | (7, 3) | 8 | x |
| 8 | (8, 3) | 2 | 대각선 |
| 9 | (9, 4) | 10 | x |
| 10 | (10, 4) | 4 | 대각선 |
| 11 | (11, 5) | 12 | x |
| 12 | (12, 5) | 6 | 대각선 |
| 13 | (13, 6) | 14 | x |
| 14 | (14, 6) | 8 | 도착 |
err은 「지금까지 실제 선에서 얼마나 벗어났는가」를 담은 정수 하나입니다. 2·err의 부호만 보고 x를 갈지 y를 갈지 대각선으로 갈지 정하고, 간 만큼 err에 dx나 dy를 더합니다. 2를 곱하는 것은 시프트라 곱셈 축에도 들지 않습니다.
사용 방법
- 1직선이면 시작점과 끝점을, 원이면 반지름을 넣습니다.
- 2격자에 찍힌 픽셀을 확인합니다.
- 3단계 표에서 오차항이 어떻게 갱신되는지 봅니다.
- 4실수로 계산해 반올림한 결과와 어디가 다른지 확인합니다.
- 5기울기를 바꿔 가며 계단이 어떻게 달라지는지 봅니다.
자주 묻는 질문
두 점을 잇는 선을 정수 덧셈과 부호 판정만으로 픽셀에 찍는 방법입니다. 1962년 잭 브레젠험이 IBM 플로터용으로 만들었고, 곱셈·나눗셈·소수를 전혀 쓰지 않아 지금까지도 그래픽스와 임베디드에서 쓰입니다.
되지만 느립니다. 칸마다 나눗셈과 반올림이 필요하고, 값을 누적하면 부동소수점 오차가 쌓입니다. 브레젠험은 「지금까지 실제 선에서 얼마나 벗어났는가」를 정수 하나에 담아 두고 더하고 빼며 부호만 보므로 오차가 쌓일 자리가 없습니다.
정확히 반 칸인 자리에서만 갈리고 나머지는 모두 같습니다. 예를 들어 실제 선이 y = 3.5를 지나는 칸에서 위로 붙일지 아래로 붙일지는 관례의 문제라 구현마다 다릅니다. 그 밖의 자리에서는 두 방법이 언제나 같은 픽셀을 고릅니다.
기울기와 방향에 따라 나뉘는 여덟 가지 경우입니다. 원래 브레젠험은 오른쪽 위로 완만하게 올라가는 한 경우만 다루고 나머지는 좌표를 뒤집어 처리했습니다. 지금 널리 쓰이는 꼴은 x·y의 부호를 따로 빼 두어 여덟 경우를 한 번에 처리합니다 — 이 도구도 그 꼴입니다.
중점 원 알고리즘을 씁니다. 「다음 픽셀의 중점이 원 안인가 밖인가」를 정수 판정값 하나로 가르는데, 원리는 직선과 같습니다. 8분원만 그린 뒤 나머지는 대칭으로 찍어 계산이 8분의 1로 줍니다.
씁니다. 안티앨리어싱을 하는 요즘 렌더러는 다른 방법을 쓰지만, 픽셀 단위로 확실하게 찍어야 하는 곳 — 임베디드 디스플레이, 픽셀 아트, 격자 위의 시야 판정, 지도 타일 위의 선분 훑기 — 에서는 여전히 이 방법이 기본입니다.
전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고, 입력값은 이 기기에만 남습니다.
알아두면 좋은 점
- 정답지는 실수 기울기로 계산해 반올림한 결과입니다. 끝점이 ±40 안에 있는 모든 완만한 선의 93,561개 점을 하나씩 대조해, 정확히 반 칸인 자리(1,396군데) 말고는 한 점도 어긋나지 않는 것을 확인했습니다. 「예외가 어디까지인가」를 못 박아 둔 것이 이 검사의 핵심입니다.
- 가파른 선은 축을 바꿔 같은 방식으로 대조합니다.
- 기본 성질도 함께 검사합니다. 점의 개수가 max(|dx|, |dy|) + 1이고, 이웃한 점이 가로·세로로 많아야 한 칸 떨어져 있으며(8방향 연결), 같은 점을 두 번 찍지 않고, 양 끝점이 반드시 들어 있어야 합니다.
- (0,0) → (10,4) 자취와 대각선·수직선의 결과를 검산값으로 고정했습니다.
- 원은 반지름 1~40에서 모든 점이 반지름에서 반 칸 안쪽에 있는 것, 여덟 방향으로 대칭인 것, 중심을 옮기면 그대로 옮겨 가는 것을 검사합니다.
- 선은 가로·세로 512칸까지, 원은 반지름 512까지 다룹니다.
- 이 도구가 쓰는 꼴은 부호를 따로 빼 여덟 방향을 한 번에 처리합니다. 원래 논문의 꼴은 한 팔분면만 다루고 나머지는 좌표를 뒤집었습니다.
함께 보면 좋은 도구
마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.