Computación Gráfica Avanzada - 08/04/2007, 20:05

Bueno, el proyecto ha demostrado ser mucho más complicado de lo que se esperaba y en gran parte de la semana, lo único que he logrado es detectar colisiones entre un punto y un plano acotado (en Humano: que el humanoide pueda tocar el piso sin caerse y caerse cuando no toque el piso).

La lógica detrás del algoritmo que me inventé (por alguna razón tengo problemas entendiendo el libro que saqué de la biblioteca que trae todos los métodos) es la siguiente:

Se tiene una figura acotada de 4 lados (no necesariamente un cuadrado perfecto, pero sí plana, aunque pueda estar "inclinada"). Entonces tengo un punto que puede o no ser coplanar, puede estar o no dentro del plano (los pies del monigote). Se obtiene la normal a la figura (la dirección que resulta perpendicular a la superficie de la figura).

Entonces se calcula la distancia mínima del punto al plano infinito en el cual se encuentra la figura mediante la fórmula de geometría analítica que está en el libro de Érik Castañeda:


donde b es el vector de posición del punto por fuera del plano, a es cualquier punto perteneciente al plano y N es el vector normal al plano. (Nota: en la parte de arriba las || son de valor absoluto mientras que en la de abajo significan "norma de N"; si se usa una normal unitaria se puede omitir la división).

Ya que se tiene la distancia, se obtiene la proyección (la "sombra" del punto) sobre el plano que contiene la figura.

Con la proyección, se determina un punto forzosamente dentro de la figura (por ejemplo un punto intermedio entre 2 vértices de la figura) y se une este punto interior con la proyección.

Se encuentra entonces la intersección con la figura de la línea que une el punto interior con el mono (si el mono se encuentra efectivamente dentro de la figura, se extiende la línea hasta que se intersecta, ya que esto no se sabe ni es detectable matemáticamente todavía).

Finalmente se determina cuál de los dos puntos está más cerca del punto interior, si los pies del monigote o la intersección. Si los pies del mono están más cerca, el mono está efectivamente dentro de la figura.

Aquí está la teoría para resolver la intersección:



Y también tengo aquí un pequeño demo para windows:

cga2007-2/cgademo-win.zip

Y el mismo archivo con el código fuente ha sido actualizado:

cga2007-2/lanjobot2.tar.bz2

Por supuesto, el método tiene varias consideraciones que no puse (y ahorita mi programa tiene varias fallas) pero esencialmente así funciona.


< Back to blog

This site doesn't use cookies, does not log IPs and does not track you in any way.