15 votos

Reflejar un rayo en un círculo para que incida en otro punto

mi problema es el siguiente:

Tengo dos puntos ( $e$ y $p$ ) en un espacio 2D y estoy tratando de averiguar en qué parte del círculo está el reflejo de $p$ visto desde $e$ . $$$$ $$$$ Así que la forma en que abordé esto es buscando el vector desde el centro del círculo hasta el punto, donde el rayo se refleja.

[Para simplificar, el centro del círculo se sitúa en $\color{darkturquoise}{(0,0)}$ y tiene un radio de longitud unitaria. Los dos puntos están representados por los vectores $\color{deeppink}{e}$ y $\color{gold}{p}$ ]

En la imagen se busca el vector $\color{red}{r}$ que coincide con el vector normal de la superficie del círculo. Así que este vector tiene que cumplir 2 propiedades:

  1. $||\color{red}{r}|| = 1$
  2. El ángulo entre $\color{red}{r}$ y $\color{green}{p-r}$ debe ser igual al ángulo entre $\color{blue}{e-r}$ y $\color{red}{r}$ .

La ecuación para la primera propiedad es bastante sencilla. Para la segunda propiedad se me ocurrió la siguiente ecuación: $$\Bigg|\Bigg|\frac{\color{blue}{e-r}}{||\color{blue}{e-r}||}\times\color{red}{r}\Bigg|\Bigg| = \Bigg|\Bigg|\color{red}{r}\times\frac{\color{green}{p-r}}{||\color{green}{p-r}||}\Bigg|\Bigg|\\ \frac{||(\color{blue}{e-r})\times\color{red}{r}||}{||\color{blue}{e-r}||} =\frac{||\color{red}{r}\times(\color{green}{p-r})||}{||\color{green}{p-r}||}\\ \frac{1}{||\color{blue}{e-r}||}\Big|\Big|(\color{deeppink}{e}\times\color{red}{r})-\big((-\color{red}{r})\times\color{red}{r}\big)\Big|\Big|= \frac{1}{||\color{green}{p-r}||}\Big|\Big|(\color{red}{r}\times\color{gold}{p})-\big(\color{red}{r}\times(-\color{red}{r})\big)\Big|\Big|\\ \frac{||\color{deeppink}{e}\times\color{red}{r}||}{||\color{blue}{e-r}||}= \frac{||\color{red}{r}\times\color{gold}{p}||}{||\color{green}{p-r}||}\\ \frac{||\color{green}{p-r}||}{||\color{blue}{e-r}||}= \frac{||\color{red}{r}\times\color{gold}{p}||}{||\color{deeppink}{e}\times\color{red}{r}||}\\ \frac{\sqrt{1 + ||\color{deeppink}{e}||^{2} - 2(\color{red}{r}\cdot\color{pink}{e})}}{\sqrt{1 + ||\color{gold}{p}||^{2} - 2(\color{red}{r}\cdot\color{gold}{p})}}= \frac{||\color{red}{r}\times\color{gold}{p}||}{||\color{deeppink}{e}\times\color{red}{r}||} $$ Después utilizo el hecho de que el producto cruzado de 2 vectores 2D tiene un único valor distinto de cero y determina la longitud de ese producto cruzado. $$ \frac{\sqrt{1 + ||\color{deeppink}{e}||^{2} - 2(\color{red}{r}_{1}\color{pink}{e}_{1} + \color{red}{r}_{2}\color{pink}{e}_{2})}}{\sqrt{1 + ||\color{gold}{p}||^{2} - 2(\color{red}{r}_{1}\color{gold}{p}_{1} + \color{red}{r}_{2}\color{gold}{p}_{2})}}= \frac{\color{red}{r}_{1}\color{gold}{p}_{2}-\color{red}{r}_{2}\color{gold}{p}_{1}}{\color{deeppink}{e}_{1}\color{red}{r}_{2}-\color{deeppink}{e}_{2}\color{red}{r}_{1}} $$ El lado izquierdo es positivo. Quiero que ambos ángulos tengan signos iguales, porque ambos están en la misma dirección general que $\color{red}{r}$ . Esto significa que el lado derecho también es positivo. Elevo al cuadrado ambos lados para eliminar las raíces de la izquierda. $$ \frac{1 + ||\color{deeppink}{e}||^{2} - 2(\color{red}{r}_{1}\color{deeppink}{e}_{1} + \color{red}{r}_{2}\color{pink}{e}_{2})}{1 + ||\color{gold}{p}||^{2} - 2(\color{red}{r}_{1}\color{gold}{p}_{1} + \color{red}{r}_{2}\color{gold}{p}_{2})}= \frac{(\color{red}{r}_{1}\color{gold}{p}_{2}-\color{red}{r}_{2}\color{gold}{p}_{1})^{2}}{(\color{deeppink}{e}_{1}\color{red}{r}_{2}-\color{deeppink}{e}_{2}\color{red}{r}_{1})^{2}} $$ Y esto es lo más lejos que puedo llegar. No creo que sustituir $p_{2}$ con $\sqrt{1-p_{1}^2}$ me llevará a cualquier sitio y también lo evitaré, ya que voy a utilizarlo en una aplicación gráfica y estoy intentando hacer el menor número de cálculos posible. $$$$ Espero haber explicado bien el problema y haber seguido todas las convenciones de este foro :) Este es mi primer post aquí, así que acepto cualquier crítica al respecto.

0 votos

Bienvenido a MSE, ¿qué tal una aproximación por geometría analítica?

0 votos

No soy matemático, así que no estoy seguro de lo que quieres decir. ¿Puedes darme una idea de qué leer? He abierto la página de la Wiki sobre geometría analítica, pero no estoy seguro de estar preparado para empezar a aprender un campo de las matemáticas totalmente nuevo para mí por este único problema :D

2 votos

Yo mismo hice una investigación, utilizando un sistema de álgebra computacional. Parece que el problema consiste en resolver cuárticos, y al intentarlo incluso para algunos puntos enteros se obtienen expresiones nada sencillas. Aunque parece que es posible una solución analítica, parece que dicha solución será lo suficientemente desagradable como para que no merezca la pena investigarla o aplicarla. :-(

1voto

Jens Puntos 97

He hecho un programa que parece funcionar muy bien, es decir, ha pasado todos los ejemplos que he probado. No utiliza ninguna iteración pero sí requiere resolver un polinomio cúbico. Si estáis interesados, os facilitaré el código.

Mi idea es la siguiente: Si giro los puntos E y P alrededor del centro del círculo, entonces en algún ángulo de rotación $\alpha$ el punto de reflexión debe estar en la parte superior del círculo, es decir, en el punto $(0,1)$ . Y una forma de saber que he encontrado el ángulo de rotación correcto es si la pendiente de una línea desde E' hasta $(0,1)$ es el igual negativo de la pendiente de P' a $(0,1)$ . Si pudiera encontrar el ángulo de esta manera, entonces el punto de reflexión, en el montaje original, sólo estaría situado en un ángulo de $\frac{\pi}{2} - \alpha$ .

enter image description here

Por lo tanto, si dejamos que $E=(a,b)$ y $P=(c,d)$ entonces la posición girada de $E$ Llámalo $E'=(a_1, b_1)$ sería: $$a_1 = a \cos(\alpha)-b \sin(\alpha)$$ $$b_1 = a \sin(\alpha)+b \cos(\alpha)$$ Lo mismo ocurre con $P'=(c_1,d_1)$ .

Si las pendientes de $E'$ y $P'$ a (0,1) son iguales negativos, entonces $$\frac{b_1-1}{a_1} = -\frac{d_1-1}{c_1}$$

Insertando las ecuaciones de $a_1, b_1,$ etc. en la ecuación anterior y simplificando, obtenemos $$(ac-bd)\sin(2\alpha) + (bc+ad) \cos(2\alpha)+(b+d) \sin(\alpha) -(a+c)\cos(\alpha) = 0$$ No es tan fácil de resolver. Pero decidí intentar una aproximación, simplemente sustituyendo las funciones trigonométricas por los dos primeros términos de sus series de Taylor. Estas son bastante precisas hasta aproximadamente $40^\circ$ , lo cual es suficiente como hablaré más adelante.

Insertando las sustituciones y simplificando obtenemos $$-\frac{8e+g}{6}\alpha^3 + (\frac{h}{2}-2f)\alpha^2+(2e+g)\alpha+(f-h) = 0$$ donde $e=(ac-bd), f=(bc+ad), g=(b+d)$ y $h=(a+c)$ .

Las raíces de esta ecuación cúbica se pueden encontrar ahora de la manera habitual.

Esta fue mi primera versión del programa y funcionó un poco, pero podría estar mal por $5-6 ^\circ$ que es demasiado. El problema es que las aproximaciones se vuelven inexactas para ángulos grandes. La solución que encontré fue hacer una rotación inicial de E y P tal que la bisectriz del ángulo de $\angle E'CP'$ está en $90^\circ$ . Esto pone a E y P cerca de donde deberían estar y significa que el ángulo de ajuste final que se encuentra a través de la ecuación cúbica, es pequeño.

Basándome en los ejemplos que he probado (y comprobado a través de los dibujos de GeoGebra), la precisión del ángulo encontrado se acerca a los 2 decimales. Un ejemplo de ello es el siguiente:

enter image description here

La entrada fue $E=(-1,-1.5), P=(-2,2)$ y la salida era el ángulo $-168.05^\circ$ .

0 votos

Lo que me parece interesante de tu trabajo, @Jens, es que tu ecuación final (si sustituyes $\sin 2x = 2\sin x \cos x$ y $ \cos 2x = \cos ^2 x - \sin ^2 x) termina con el mismo grado de complejidad que la mía, una "trigonométrica cuadrática". No puedo decir por lo que has publicado, pero ¿puedes decirme si los ángulos dobles surgieron de forma natural de tu ecuación inicial de las pendientes, o lo conseguiste en esa forma utilizando la inversa de las fórmulas de ángulos dobles?

0 votos

Utilicé la fórmula inversa a la del ángulo doble. ¿Has conseguido hacer un programa que funcione?

0 votos

No, me he detenido en el punto de conseguir esa ecuación. Estoy un poco más interesado en buscar soluciones generales, a diferencia de sus aproximaciones prácticas que probablemente son más útiles para el cartel original. :--}

1voto

Narlin Puntos 1

He hecho un modelo de Geogebra ( https://www.geogebra.org/m/r75cgAfw ) que funciona de acuerdo con sus ecuaciones originales y parece dar las respuestas correctas hasta donde se ha probado. Empezando por tus originales: El ángulo entre $r$ y $p-r$ debe ser igual al ángulo entre $r$ y $e-r$ $$acos\left(\frac{\mathbf{r-(p-r)}}{\mathbf{|r|\cdot|p-r|}}\right)=acos\left(\frac{\mathbf{r-(e-r)}}{\mathbf{|r|\cdot|e-r|}}\right)$$ $$|r|=1$$

A continuación necesito simplificar un poco, así que 1) expandir el numerador y 2)sustituir tanto |r| como r \cdot r con 1, y 3)quitar el acos de ambos lados. para obtener: $$\mathbf{\frac{r\cdot p-1}{|p-r|}}=\mathbf{\frac{r\cdot e-1}{|e-r|}}$$

A continuación, sustituyo el vector (x,y) por $\mathbf r$ recordando que ambos $\mathbf e$ y $\mathbf p$ son vectores conocidos. $$\frac{p_{x}x+p_{y}y-1}{\sqrt{(p_{x}-x)^{2}+(p_{y}-y)^{2}}}=\frac{e_{x}x+e_{y}y-1}{\sqrt{(e_{x}-x)+(e_{y}-y)^{2}}}$$ Por último, sustituya $x=\sqrt{-y^2+1}$ para x. Esto crea un pequeño problema con el lugar del círculo donde se encuentra la reflexión, ya que provoca 2 respuestas, una en cada lado del círculo. Aún así, la ecuación CAS para Geogebra es $$\frac{p_{y} y + \sqrt{-y^{2} + 1} p_{x} - 1}{\sqrt{{\left(p_{x} -\sqrt{-y^{2} + 1}\right)}^{2} + {\left(p_{y} - y\right)}^{2}}} =\frac{e_{y} y + \sqrt{-y^{2} + 1} e_{x} - 1}{\sqrt{{\left(e_{x} -\sqrt{-y^{2} + 1}\right)}^{2} + {\left(e_{y} - y\right)}^{2}}}$$ que es 1 ecuación en 1 incógnita, lo que permite una solución numérica relativamente rápida. Lo suficientemente rápido como para que uno pueda moverse alrededor de los puntos E y P y obtener varias soluciones.

0 votos

El vector que busco coincidirá con la bisectriz de ECP sólo si E y P están igualmente alejados del centro. Y en el caso común no lo están :(

0 votos

Echa un vistazo a esta hoja de Geogebra. Coge la P con el ratón y muévela. geogebra.org/worksheet/edit/id/E5gCDg48

0 votos

No se puede abrir el enlace :( ¿Puedes decirme el nombre del material, para que pueda buscarlo yo mismo?

0voto

user275313 Puntos 103

Voy a reportar el resultado que obtuve de algunos cálculos rápidos, por si alguien puede llevarlos más allá. El resultado es bastante limpio, pero no parece llevar a ninguna respuesta cerrada agradable, por lo que el OP, que probablemente valora la velocidad de cálculo sobre la precisión absoluta, probablemente debería ir con otros métodos.

Llama a los puntos $p$ y $e$ como $\vec a$ y $\vec b$ . (No importa cuál es cuál, ya que la configuración es simétrica en $\vec a$ y $\vec b$ .) Sea $\vec u$ sea el vector unitario al punto del círculo y $r$ sea el radio del círculo. Calculé la dirección de la línea que se obtiene al rebotar $\vec a - r\vec u$ fuera del punto $r\vec u$ y luego escribió la ecuación que requiere $\vec b$ para estar en la línea en esa dirección que pasa por $r \vec u$ . Si escribimos $\vec v ^\perp$ para el vector $\vec v $ girado 90 grados (en sentido contrario a las agujas del reloj, para elegir una dirección definida) la ecuación se simplifica a $$2(\vec a\cdot \vec u)(\vec b \cdot \vec u ^\perp) - r(\vec b \cdot \vec u ^\perp) + r(\vec a ^ \perp \cdot \vec u) = \vec b \cdot \vec a ^ \perp.$$

Si escribiera $\vec u$ como $(\cos\theta, \sin \theta)$ y lo introducimos en la ecuación obtendríamos una "cuadrática trigonométrica", es decir, tendría $\cos$ , $\sin$ , $\cos^2$ , $\cos\cdot\sin$ y $\sin^2$ términos. Estoy seguro de que podrías encontrar un algoritmo para resolver este tipo de ecuaciones, pero también supongo que sería demasiado complicado para ser útil en tu situación.

0voto

amd Puntos 2503

El principio de Fermat sugiere una aproximación a este problema. La idea es encontrar el punto $\mathbf r$ en el círculo que minimiza la distancia $\|\mathbf r-\mathbf p\|+\|\mathbf r-\mathbf e\|.$ Utilizando la parametrización $\mathbf r=(r\cos t,r\sin t)$ esta distancia es $$\sqrt{(\cos t-p_x)^2+(\sin t-p_y)^2}+\sqrt{(\cos t-e_x)^2+(\sin t-e_y)^2}$$ y el problema se convierte en el de resolver $${p_x\sin t-p_y\cos t \over \sqrt{(\cos t-p_x)^2+(\sin t-p_y)^2}}+{e_x\sin t-e_y\cos t \over \sqrt{(\cos t-e_x)^2+(\sin t-e_y)^2}} = 0.$$ Por desgracia, no parece que esto se preste a una solución de forma cerrada agradable (o incluso no tan agradable). La sugerencia de Rahul de realizar una búsqueda binaria o tal vez una aproximación por el método de Newton a la raíz de la ecuación parece lo mejor para una solución práctica que se vaya a codificar. La bisectriz del ángulo de $\mathbf p$ y $\mathbf e$ es una primera estimación razonable para $t$ (equiv. $\mathbf r$ ) para cualquier aproximación iterativa.

Un enfoque quizás más prometedor que se me ocurre es que el punto $\mathbf r$ es tal que $\mathbf p$ , $\mathbf r$ y el reflejo de $\mathbf e$ en la tangente en $\mathbf r$ son colineales. (Por simetría, se podría reflejar $\mathbf p$ en su lugar, por supuesto). Un vector normal a la tangente en $\mathbf r$ es $\mathbf r$ mismo, por lo que el reflejo de $\mathbf e$ es $$\mathbf e' = \mathbf e + 2(1-\mathbf e\cdot\mathbf r)\,\mathbf r.$$ La condición de colinealidad puede expresarse mediante la desaparición del triple producto escalar (en coordenadas homogéneas) $[\mathbf r,\mathbf p,\mathbf e']=0$ . Expandiendo por coordenadas, esto se traduce en la ecuación $$(p_x e_y+p_y e_x)(x^2-y^2) - 2(p_x e_x-p_y e_y)xy - (p_y+e_y)x + (p_x+e_x)y = 0. \tag{*}$$ Junto con la restricción $x^2+y^2=1$ Esto hace que el problema sea calcular la(s) intersección(es) de esta hipérbola con el círculo unitario. Hay una ecuación cúbica inevitable que hay que resolver, pero todo el cálculo puede mecanizarse mediante un algoritmo descrito en la obra de Richter-Gebert Perspectivas de la geometría proyectiva y esbozado en esta respuesta . Dado que una de las cónicas es un círculo unitario, es probable que se puedan hacer algunas simplificaciones en el cálculo general. Puede haber hasta cuatro intersecciones, por lo que todavía tendrá que seleccionar la correcta, pero la ecuación (*) es suficiente para simular una solución en una herramienta gráfica como GeoGebra .

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