0
我需要找到所有點在一條線上。我試圖布氏算法,但它不會在以下情況下工作:劃線所有點
(0, 0)
.-----------+-----------+-----------.
|...........| | |
|...........| | |
|.....XXXX..| | |
|........XXXX | |
|...........XXXXX | |
+-----------+---XXXX----+-----------+
| |......XXXXX|...........|
| |..........XXXX.........|
| |...........|.XXXXX.....|
| |...........|...........|
| |...........|...........|
`-----------+-----------+-----------´
(2, 1)
X
是實際線路,.
是什麼布氏算法的回報,注意線橫穿(1, 0)
但不顯着。
我怎樣才能找到一條線經過有效的所有像素?我不需要這個反鋸齒,所以我認爲吳的算法是一個矯枉過正。線端點位於像素的中間。
要引用的算法我是:
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 2011-05-04 15:43:55
使用起點,線的斜率和每個「單元格」的大小,可以找到該線將首先跨越哪一側。 – Tipx 2011-05-04 16:37:10