线和位图碰撞检测

时间:2018-05-17 16:33:01

标签: javascript bitmap collision-detection p5.js bresenham

我正在尝试在连接两个点的线和位图蒙版之间实现有效的碰撞检测。

示例:

bitmap and two points

目前我正在使用Bresenham's line drawing algorithm绘制两点之间线条的每个像素,并将该像素与位图进行比较(如果像素为黑色则返回true,否则继续绘制线条。)

collision(x0,y0,x1,y1) {
  let dx = Math.abs(x1 - x0),
    dy = Math.abs(y1 - y0),
    sx = (x0 < x1) ? 1 : -1,
    sy = (y0 < y1) ? 1 : -1,
    err = dx - dy,
    e2

  // loop through line drawing
  while (!((x0 == x1) && (y0 == y1))) {
    e2 = err << 1;
    // check line point x,y against bitmap
    if (bitmap[x0][y0] == 1) {
      return 1;
    }
    if (e2 > -dy) {
      err -= dy;
      x0 += sx;
    }
    if (e2 < dx) {
      err += dx;
      y0 += sy;
    }
  }
  // If looped through whole line and not returned collision return false
  return 0
}

这是一种好/有效的方法吗?或者是否有针对此问题的固定方法或更好的方法?

提前致谢。

0 个答案:

没有答案