У меня есть мяч, прыгающий на моем экране, и есть статический прямоугольник, с которым он может столкнуться и должен отскакивать. Я уже выяснил, как проверить, столкнулся ли шар с прямоугольником, и это отлично работает. Теперь мне нужно определить, на какой стороне прямоугольника попал шар. Я сейчас пытаюсь этот код (который работает для тестирования четырех сторон, но, кажется, есть проблемы с углами) ...Круг и Rectangle Collision Android
if(Math.abs(ball.centerY-boundingBox.top) < ball.radius) {
// Hit the top
}
else if(Math.abs(ball.centerY-boundingBox.bottom) < ball.radius) {
// Hit the bottom
}
else if(Math.abs(ball.centerX-boundingBox.left) < ball.radius) {
// Hit the left
}
else if(Math.abs(ball.centerX-boundingBox.right) < ball.radius) {
// Hit the right
}
... Кто-нибудь есть какие-либо идеи, как я могу улучшить это? Или придумать лучшее решение в этом отношении?
Мне просто нужно определить, с какой стороны кружок попал на прямоугольник после столкновения. И я уже понял, как проверить, столкнулись ли они или нет.
Спасибо!
Ваш последний комментарий о поиске ближайшей точки - это то, как я в настоящее время выполняю свое первоначальное обнаружение столкновения. Мне нравится ваша идея о тестировании, если ближайшая точка - это угол. Предполагая, что это угол, есть ли у вас какие-либо идеи, как я буду определять, на какой стороне он основан? Предполагая, что это не идет прямо к углу. Спасибо за ваш ответ, кстати! – DRiFTy
Нет встроенной стороны, если она попадает в угол, потому что углы принадлежат двум сторонам. Однако, если вам нужно выбрать один из них, то, предположив, что вы попали в верхний правый угол, вы, вероятно, выберете верхний край, если вектор от угла до центра сферы ближе к вертикали, правый край, если он будет ближе к горизонтали (так это сравнение по абсолютным значениям координат x и y) и либо без предпочтений, если ровно 45 градусов. – Tommy
Итак, теперь я сделал так, чтобы он выбирал сторону, когда он ударялся в угол. Только одна небольшая проблема, в которой у вас может быть некоторое понимание ... Когда мяч катится очень медленно по верхней части прямоугольника, и он вот-вот упадет, когда он достигнет угла, он начинает немного нервничать. Он по-прежнему идет по тому же общему пути, но не совсем выглядит правильно. Хотя углы, похоже, обрабатываются очень хорошо, поэтому спасибо за это. – DRiFTy