對於碰撞測試,我需要柵格化一條線。布氏算法的工作原理幾乎一樣需要,但就是缺陷產生一行: 線光柵化/ 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