102 votos

¿Cómo obtener un vector de reflexión?

Estoy haciendo un ejercicio de raytracing. Tengo un vector que representa la normal de una superficie en un punto de intersección, y un vector del rayo a la superficie. ¿Cómo puedo determinar cuál será la reflexión?

En la siguiente imagen, tengo d y n . ¿Cómo puedo conseguir r ?

Vector d is the ray; n is the normal; t is the refraction; r is the reflection

Gracias.

3 votos

Esta es la pregunta número 5.13 de I.e irodov :p

100voto

mmcglynn Puntos 1619

$$r = d - 2 (d \cdot n) n$$

donde $d \cdot n$ es el producto punto, y $n$ debe ser normalizado.

2 votos

Y si mi d que apunte en la otra dirección, tengo que negarlo primero, ¿no?

2 votos

@user2755 Sí, pero puedes probarlo tú mismo con lápiz y papel utilizando casos sencillos, por ejemplo $d = [1,-1]; n=[0,1]$ (entrando hacia abajo y hacia la derecha en un plano de tierra orientado hacia arriba). Con esto, $r = [1,-1] - 2 \times (-1) \times [0,1] = [1,-1] + 2 \times [0,1] = [1,-1] + [0,2] = [1,1]$ .

4 votos

No tengo ni idea de cómo funciona, pero funciona, y eso es lo que importa.

88voto

user3035 Puntos 91

Dejemos que $\hat{n} = {n \over \|n\|}$ . Entonces $\hat{n}$ es el vector de magnitud uno en la misma dirección que $n$ . La proyección de $d$ en el $n$ está dada por $\mathrm{proj}_{n}d = (d \cdot \hat{n})\hat{n}$ y la proyección de $d$ en la dirección ortogonal viene dada, por tanto, por $d - (d \cdot \hat{n})\hat{n}$ . Por lo tanto, tenemos $$d = (d \cdot \hat{n})\hat{n} + [d - (d \cdot \hat{n})\hat{n}]$$ Tenga en cuenta que $r$ tiene $-1$ veces la proyección sobre $n$ que $d$ tiene sobre $n$ mientras que la proyección ortogonal de $r$ en $n$ es igual a la proyección ortogonal de $d$ en $n$ Por lo tanto $$r = -(d \cdot \hat{n})\hat{n} + [d - (d \cdot \hat{n})\hat{n}]$$ Otra posibilidad es que lo veas así $-r$ tiene la misma proyección sobre $n$ que $d$ tiene sobre $n$ con su proyección ortogonal dada por $-1$ veces la de $d$ . $$-r = (d \cdot \hat{n})\hat{n} - [d - (d \cdot \hat{n})\hat{n}]$$ La última ecuación es exactamente $$r = -(d \cdot \hat{n})\hat{n} + [d - (d \cdot \hat{n})\hat{n}]$$

Por lo tanto, se puede obtener $r$ de $d$ a través de $$r = d - 2(d \cdot \hat{n})\hat{n}$$ Expresado en términos de $n$ mismo, esto se convierte en $$r = d - {2 d \cdot n\over \|n\|^2}n$$

11 votos

¿Esto es válido para vectores de cualquier dimensión? ¿2D, 3D, 4D, etc.?

6 votos

@NightElfik Abosolutamente

8voto

programaths Puntos 111

Estaba tratando de entender cómo calcular el vector de reflexión y encontré estas respuestas. No pude entenderlas fácilmente, así que me tomé mi tiempo para hacerlo yo mismo, ¡lo bueno es que ahora puedo detallarlo de forma ELI5!

Desarrollé la fórmula utilizando los 3 pasos que se muestran en el gráfico. Los describo a continuación.

Steps to compute the rfection vector

Así, la situación inicial es $\vec{a}$ apuntando hacia un plano. Entonces tenemos la normal $\vec{n}$ de la longitud de la unidad y nos gustaría encontrar $\vec{b}$

Por lo tanto, el primer paso está utilizando el producto punto para obtener un vector vertical que se utilizará en paso 2 .

Con paso 1 mi fórmula parcial es: $2\times\left(a+(-\vec{a})\cdot\vec{n}\times{}n\right)$

el cambio de signo de $\vec{a}$ arriba, lo "volteamos"

Entonces en paso 2 Puedo escribir: $-\vec{a}+2\times\left(a+(-\vec{a})\cdot\vec{n}\times{}n\right)$

Ahora, puedo distribuir: $-\vec{a}+2\times{}\vec{a}+2\times(-\vec{a})\cdot\vec{n}\times{}n$

Luego simplificar, y termino con: $\vec{a}+2\times(-\vec{a})\cdot\vec{n}\times{}n$

Si se niega un vector en el producto punto, se niega el resultado del producto punto.

$\vec{a}\cdot\vec{b}=-(-\vec{a})\cdot\vec{b}$

Eso significa que puedo reescribir la fórmula así:

$\vec{a}-2\times(\vec{a})\cdot\vec{n}\times{}n$

1 votos

Gracias, señor. Aunque la forma en que usaste la notación del producto cruzado como notación de multiplicación me confundió mucho.

1voto

DevShot Puntos 335

Supongamos que $d$ y $r$ tienen la misma magnitud. $$ \lVert r \rVert = \lVert d \rVert $$ A partir de la relación de reflexión, tenemos esta igualdad sobre los productos cruzados. $$ r \times n \ = \ d \times n \\ \therefore \ \left( r \ - d \right) \times n \ = \ \vec{0} $$ lo que significa $$ r \ - d \ = s \ n \\ \therefore \ r \ = \ d \ + s \ n $$ donde $s$ es un número real.
Tomando sus cuadrados, tenemos $$ \lVert r \rVert ^2 \ = \ \lVert d \rVert ^2 + \ 2\ s \left( d \cdot n \right) \ + s^2 \ \lVert n \rVert ^2 \\ \therefore \ s \left( s \ \lVert n \rVert ^2 + \ 2 \ (d \cdot n) \right) = 0 \\ $$ Así que $$ s \ = 0 \ , - \frac{2 \ (d \cdot n)}{\lVert n \rVert ^2} $$ Desde $s = 0 \ $ significa $ \ d \ $ mismo, tomamos el otro valor y obtenemos $$ r \ = \ d - \frac{2 \ (d \cdot n)}{\lVert n \rVert ^2} \ n $$

0voto

Bhav Puntos 24

En caso de que quieras rotar sobre el eje Y puedes usar lo siguiente en su lugar. Esto es útil sobre todo para aplicaciones de gráficos por ordenador. Tenga en cuenta que $d$ se supone que apunta hacia afuera en la ecuación siguiente (es decir, se ignora la dirección de $d$ en la imagen de abajo) y $n$ necesita ser normalizado:

enter image description here

$$r = 2 (d \cdot n) n - d$$

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