줄에있는 모든 점을 찾아야합니다. 나는 Bresenham의 알고리즘을 시도했지만 다음과 같은 경우에 작동하지 않습니다모든 점을 줄 넘김
(0, 0)
.-----------+-----------+-----------.
|...........| | |
|...........| | |
|.....XXXX..| | |
|........XXXX | |
|...........XXXXX | |
+-----------+---XXXX----+-----------+
| |......XXXXX|...........|
| |..........XXXX.........|
| |...........|.XXXXX.....|
| |...........|...........|
| |...........|...........|
`-----------+-----------+-----------´
(2, 1)
X
실제 라인, .
이 Bresenham 알고리즘 리턴, 줄을 알 것입니다 (1, 0)
교차하지만이 표시되지 않습니다.
효율적으로 선을 통과하는 모든 픽셀을 어떻게 찾을 수 있습니까? 이 앤티 앨리어싱이 필요하지 않으므로 Wu의 알고리즘이 과도하다고 생각합니다. 선 종점은 픽셀의 중간에 있습니다.
내가 가지고있는 알고리즘을 참조 할 수있다 :
int dx = System.Math.Abs(x0 - x1);
int dy = System.Math.Abs(y0 - y1);
int sx = x0 < x1 ? 1 : -1;
int sy = y0 < y1 ? 1 : -1;
int err = dx - dy;
int lx = x0;
int ly = y0;
for(int i = 0; true; i++)
{
Mark(x0, y0);
if(x0 == x1 && y0 == y1)
break;
int e2 = err * 2;
if(e2 > -dy)
{
err -= dy;
x0 += sx;
}
if(e2 < dx)
{
err += dx;
y0 += sy;
}
}
내가 아래로 갈 필요가 있는지 알 수 있습니까? – Dani
시작점, 선의 기울기 및 각 '셀'의 크기를 사용하여 선의 어느 쪽이 먼저 교차하는지 확인할 수 있습니다. – Tipx