Я пытаюсь реализовать эффективное обнаружение столкновений между линией, соединяющей две точки, и битовой маской.
Пример:
В настоящее время я использую алгоритм рисования линий Брезенхэма , чтобы нарисовать каждый пиксель линии между двумя точками и сравнить этот пиксель с растровым изображением (если пиксель черный, верните 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
}
Это хороший / эффективный подход? Или есть заданный метод или лучший подход к этой проблеме?
Заранее спасибо.