Я создаю 2D игру и хочу протестировать на коллизию между OBB (Ориентированная Ограничительная рамка) и Кругом. Я не уверен в математике и коде, чтобы сделать это. Я создаю игру в C++ и opengl.
Вот что я бы сделал в псевдокоде:
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 ++ должно быть тривиально.
Поскольку обе ваши фигуры выпуклые, вы можете использовать теорему о разделительной оси. Вот учебник о том, как реализовать алгоритм для этого.
По сути, вы пытаетесь найти, можно ли провести линию между двумя фигурами, и если вы не можете ее найти, значит, они сталкиваются.
Ссылки и общий ответ взяты из этого вопроса.