对于碰撞测试,我需要栅格化一条线。布氏算法的工作原理几乎一样需要,但就是缺陷产生一行: 线光栅化/ 4连接Bresenham
我需要:
我目前的执行(基于http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm#Simplification):
public boolean isInsideLine(int x1, int y1, int x2, int y2) {
final int dx = abs(x2 - x1), dy = abs(y2 - y1);
final int sx = x1 < x2 ? 1 : -1, sy = y1 < y2 ? 1 : -1;
int err = dx - dy;
while (true) {
if (isInside(x1, y1)) //Lookup in pixel array
return true;
if (x1 == x2 && y1 == y2)
break;
final int e2 = err << 1;
if (e2 > -dy) {
err -= dy;
x1 += sx;
}
if (e2 < dx) {
err += dx;
y1 += sy;
}
}
return false;
}
是否有其他的行光栅化算法,我可以使用,或者有人知道如何修改bresenham?
在我看来,Bresenham的原始输出是8连接,但你需要4连接。您可以对原始输出进行后期处理以检测对角线链接,然后确定线条最接近哪个像素。 – koan
请参阅http://stackoverflow.com/questions/5186939/algorithm-for-drawing-a-4-connected-line看起来像是同一个问题。 – koan
出于兴趣:为什么您需要栅格化一条线以进行碰撞检测?你不能只计算交叉点吗? – Axel