【发布时间】:2012-11-24 16:07:53
【问题描述】:
对于碰撞测试,我需要光栅化一条线。 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 连接。您可以对原始输出进行后处理以检测对角线链接,然后确定该线最接近哪个像素。
-
请参阅stackoverflow.com/questions/5186939/… 了解类似问题的内容。
-
出于兴趣:为什么需要光栅化线以进行碰撞检测?你不能只计算交叉点吗?
-
用于(几乎)像素精确的 2d 碰撞。
标签: java raster rasterizing bresenham