Detección del lado de colisión círculo-rectángulo en libgdx

He pasado horas buscando la solución a esto: estoy desarrollando un pequeño juego de arriba hacia abajo con libgdx (tal vez sea importante el motor que esté usando). Ahora tengo que implementar la detección de colisiones entre mi personaje (círculo) y la pared (rectángulo). Quiero que el personaje se deslice a lo largo de la pared en caso de colisión, si es posible deslizarse. Dejame explicar:

Si me estoy moviendo 45 grados hacia arriba, puedo chocar con la parte inferior, la izquierda o la esquina de una pared.Si choco con la izquierda, quiero detener el movimiento x y moverme solo hacia arriba. Si dejo el muro, quiero seguir subiendo. Lo mismo con el lado de abajo (detener el movimiento y)Si choco con la esquina, quiero detener el movimiento (no es posible deslizarse).

Lo que estoy haciendo en realidad es verificar si la línea izquierda del rectángulo se cruza con mi círculo. Luego reviso la intersección entre la línea izquierda de la pared y mi círculo y la línea inferior de la pared y mi círculo. Dependiendo de qué intersección ocurra, establezco la posición x / y de mi círculo y establezco la velocidad x / y en 0. El problema es que la mayoría de las veces no es uncolisión por unsuperposición ocurre Por lo tanto, la verificación de fondo devuelve verdadero, incluso si en realidad el círculo solo colisionaría con el derecho. En este caso, ambas pruebas de intersección se volverían verdaderas y yo restablecería ambas velocidades como en la colisión de la esquina. ¿Como puedó resolver esté problema? ¿Hay una mejor manera de detectar colisiones y colisiones de lado o esquina? No necesito el punto exacto de colisión justo al lado del rectángulo.

Editar: Debo decir que los rectos no se giran en paralelo al eje x.

Respuestas a la pregunta(2)

Su respuesta a la pregunta