Saludos, creo que la idea de David puede funcionar muy bien. La idea
sería, según entiendo, verificar colisiones al momento de mover el
rectángulo. Las colisiones se verificarían entre las esquinas del
rectángulo y una serie de triángulos construidos con los polígonos
que nos muestras en las imágenes.
Partamos de tu gráfico inicial:
Como analizar el área de un polígono es una tarea difícil, la recomendación
de David nos puede servir: pensar el polígono como si se tratara de triángulos
pequeños:
Si bien juntos forman la figura, sería prudente almacenarlos en una estructura
que nos permita tratarlos por separado. Así, cuando queramos analizar la
superficie no importarán la cantidad de vértices, solo tendremos triángulos
y un cuadrado:
Ahora bien, imagina que comenzamos a desplazar el cuadrado por la pantalla
libremente; Si no detenemos su movimiento se pueden presentar dos
situaciones: que el cuadrado esté dentro o afuera del polígono original.
El movimiento simplemente tiene que permitir movimientos dentro del
polígono y prohibir movimientos fuera de él.
La condición que nos permite conocer, de manera sencilla, si el cuadrado
está dentro del triángulo son sus esquinas. Si está dentro del polígono, todas
sus esquinas están dentro de algún triángulo. En cambio bastará con que una de
sus esquinas esté fuera de un triángulo para considerar que el movimiento
es incorrecto:
Esto es similar a lo que ocurre en un juego de plataformas cuando quieres
controlar la caída de un personaje: solo tienes que realizar una prueba de
movimiento antes de desplazar el objeto, si el movimiento de prueba deja el
objeto dentro de la zona permitida confirmas el movimiento y en caso contrario
lo descartas.
Lamento no tener un ejemplo simple a mano, pero podría intentar escribir
uno (en python creo que sería mas ilustrativo). Tú, ¿que lenguaje estás
utilizando?.
Por cierto, he visto que existen funciones para determinar colisiones entre
puntos y triángulos. Si te parece buena la estrategia, podrías adaptar alguno
de estos para tu programa:
http://www.angelfire.com/fl/houseofbart ... e2tri.html
http://www.stratos-ad.com/forums3/viewtopic.php?t=10076
Un saludo grande.