Математика для 2D обнаружения коллизий между OBB и кругом

Я создаю 2D игру и хочу протестировать на коллизию между OBB (Ориентированная Ограничительная рамка) и Кругом. Я не уверен в математике и коде, чтобы сделать это. Я создаю игру в C++ и opengl.

5
задан antonakos 29 January 2011 в 02:48
поделиться

2 ответа

Вот что я бы сделал в псевдокоде:

function does_line_go_through_circle (original_line, circle_centerpoint, radius):
    original_slope = get_slope_of_line (original_line)
    perpendicular_slope = 1/original_slope
    perpendicular_line = create_line_with_slope_through_point (perpendicular_slope, circle_centerpoint)
    intersect_point = intersection_of_infinite_lines (perpendicular_line, original_line)
    if point_is_on_line (intersect_point, original_line):
        finite_line_along_radius = create_finite_line_between_points (circle_centerpoint, intersect_point)
        if length_of_line (finite_line_along_radius) < length_of_line (radius):
            return true
        end
    end
    return false
end

function does_box_intersect_with_circle (bounding_box, circle):
    for each side in bounding_box:
        if does_line_go_through_circle (side, circle.center, circle.radius):
            return true
        end
    end
    return false
end

Имейте в виду, я немного устарел в этом вопросе, я могу ошибаться.

В любом случае, реализовать это на C ++ должно быть тривиально.

1
ответ дан 14 December 2019 в 01:06
поделиться

Поскольку обе ваши фигуры выпуклые, вы можете использовать теорему о разделительной оси. Вот учебник о том, как реализовать алгоритм для этого.

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

Ссылки и общий ответ взяты из этого вопроса.

8
ответ дан 14 December 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: