Обнаружение столкновений линий и растровых изображений - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь реализовать эффективное обнаружение столкновений между линией, соединяющей две точки, и битовой маской.

Пример:

bitmap and two points

В настоящее время я использую алгоритм рисования линий Брезенхэма , чтобы нарисовать каждый пиксель линии между двумя точками и сравнить этот пиксель с растровым изображением (если пиксель черный, верните 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
}

Это хороший / эффективный подход? Или есть заданный метод или лучший подход к этой проблеме?

Заранее спасибо.

...