1 votos

Función de detección de colisiones de polígonos mediante la distribución Delta de Dirac y el tópico de divergencia, ayuda.

Me gustaría encontrar una forma de hacer la detección de colisiones de polígonos que maneje los polígonos cóncavos/irregulares de forma muy eficiente. Sería genial si ustedes pudieran revisar mis matemáticas y razonamiento hasta el punto en el que estoy atascado, y también ayudarme a resolver la última pregunta.

Así que empezando con lo que sabemos, sabemos que podemos encontrar el área de cualquier forma poligonal bidimensional B utilizando el Teorema de la divergencia :

$$ \iint_B\vec{\nabla}\cdot\vec{F}dA = \oint_{\partial B}(\vec{F}\cdot\hat{n})ds $$

donde $\hat{n}$ es la normal del límite del pologión. Podemos utilizar este término para encontrar el área basándonos únicamente en las posiciones de los vértices de B :

$$ \iint_BdA = \frac{1}{2}\oint_{\partial B}\vec{v} \cdot \hat{n}ds = \frac{1}{2}\oint_{\partial B} \vec{v} \cdot d\vec{r}_{\bot} $$ $$ = \frac{1}{2}\sum_{i=1}^{j}\int_0^1[(1-t)\vec{P}_i+t\vec{P}_{i+1}] \cdot (\vec{P}_{(i+1)\bot} - \vec{P}_{(i)\bot})dt = \frac{1}{2}\sum_{i=1}^j\vec{P}_i \cdot \vec{P}_{(i+1)\bot} $$

Donde $\vec{v} = x(t)\hat{i}+y(t)\hat{j}$ y $\vec{P}_i$ son las posiciones de los vértices del polígono y $\vec{v}_{\bot}$ es la normal de $\vec{v}$ . También $(i+1)$ hará un bucle hasta $i=1$ en la suma una vez $i = j$ .

Lo que acabamos de hacer es encontrar la cantidad de intesidad de $f(\vec{x})=1$ dentro de $B$ ¿cierto? Asumiendo que sí, entonces la idea es que podamos reemplazar $f(\vec{x})=1$ con cualquier función y encontrar la intesidad total de $f(\vec{x})$ dentro de la región B .

Así que con eso en mente, podemos encontrar una función $f(\vec{x})$ cuyo valor sería 1 si $\vec{x}$ está dentro del polígono B y cero en caso contrario. Me gustaría encontrar una representación algerbraica de esto $f(\vec{x})$ basado en el $\vec{P}_i$ como hicimos anteriormente para la zona. Así que bajando por esa misma ruta:

$$ f(\vec{x}) = \iint_B\delta^2(\vec{s}-\vec{x})d^2s = \oint_{\partial B}\vec{\gamma}\cdot d\vec{b}_{\bot} $$

Donde $\vec{b}$ es la parametrización de B bajo el $\vec{s}$ coordenadas. Me gustaría encontrar $\vec{\gamma}$ tal que:

$$ \vec{\nabla} \cdot \vec{\gamma} = \delta^2(\vec{x}-\vec{s}) $$

¿Es posible encontrar una representación de $\vec{\gamma}$ en términos de la función escalonada de Heavi o de otras distribuciones generalizadas?

Gracias por su tiempo.

0voto

Rob Dickerson Puntos 758

Como punto de partida, consideremos la función de Green del laplaciano bidimensional:

$$f(x,s) = \log(\|x-s\|).$$

Su gradiente $\gamma(x,s) = \frac{x-s}{\|x-s\|^2}$ es, por construcción, libre de divergencias, por lo que si $s$ está fuera del polígono, $$\int_{\delta B} \gamma\cdot \hat{n}\,dS=0,$$ y cuando $s$ está dentro, $$\int_{\delta B} \gamma\cdot \hat{n}\,dS=2\pi.$$ Además, si $J\gamma$ denota la rotación de $\gamma$ por noventa grados, tenemos $$J\gamma = \nabla \arctan\left(\frac{x_y-s_y}{x_x-s_x}\right)$$ así que sobre un borde $E$ conectando $P_i$ a $P_{i+1}$ obtenemos $$\int_E \gamma\cdot \hat{n}\, dS = \int_E J\gamma \cdot dt = \theta,$$ donde $$\theta = \arctan\left(\frac{{P_{i+1}}_y-s_y}{{P_{i+1}}_x-s_x}\right)-\arctan\left(\frac{{P_{i}}_y-s_y}{{P_{i}}_x-s_x}\right)$$ es el ángulo (con signo) $(P_i,s,P_{i+1})$ .

Como nota final, mediante un umbral adecuado, lo anterior puede utilizarse no sólo para detectar cuándo un punto está dentro de un polígono, sino también cuándo un punto está dentro de una colección arbitraria de segmentos de línea en la forma aproximada de un polígono: véase por ejemplo este reciente publicación.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X