Estoy trabajando con gráficos por computadora y necesitaba descubrir cómo se giraba algo en una imagen para poder igualar el ángulo de la cámara y recrear el elemento en 3D.
La imagen muestra la referencia con los vectores conocidos agregados.![Imagen de referencia con vectores](https://i.stack.imgur.com/0XXw7.png)
el vector horizontalX0→
se puede normalizar a[− 100]
y el otro vectory⃗
se puede normalizar a[0.207206755876541140.97829717397689820]
. el vector originaly⃗ 0
se considera que es[010]
.
ConsiderandoX0→
permanece horizontal yy⃗ 0
no lo hace, comprobé que había dos rotaciones, una alrededor del eje x (θ
) y otra alrededor del eje y (γ
) . También comprobé que se estaba utilizando una proyección ortográfica. Para mis propósitos, no me preocupa la coordenada z final.
Creé matrices de rotación y proyección de la siguiente manera:
Ro _tX=⎡⎣⎢1000c o s θ- s yo norte θ0s yo norte θc o s θ⎤⎦⎥
Ro _ty=⎡⎣⎢c o s γ0- s yo norte γ010s yo norte γ0c o s γ⎤⎦⎥
PAGr o j =⎡⎣⎢100010000⎤⎦⎥
Luego, combínalos:
Ro _tX⋅ R oty⋅ pagroj _ _=⎡⎣⎢1000c o s θ- s yo norte θ0s yo norte θc o s θ⎤⎦⎥⎡⎣⎢c o s γ0- s yo norte γ010s yo norte γ0c o s γ⎤⎦⎥⎡⎣⎢100010000⎤⎦⎥=⎡⎣⎢c o s γ- s yo norte γs yo norte θ- s yo norte γc o s θ0c o s θ- s yo norte θs yo norte γc o s γs yo norte θc o s γc o s θ⎤⎦⎥⎡⎣⎢100010000⎤⎦⎥=⎡⎣⎢c o s γ- s yo norte γs yo norte θ- s yo norte γc o s θ0c o s θ- s yo norte θ000⎤⎦⎥
Escribiendo la transformación en notación de vector unitario, obtengo:
y⃗ = (y0x _c o s γ−y0 añoss yo norte γs yo norte θ -y0z _s yo norte γc o s θ )i^+ (y0x _0 +y0 añosc o s θ -y0z _s yo norte θ )j^+ (y0x _0 +y0 años0 +y0z _0 )k^= (y0x _c o s γ−y0 añoss yo norte γs yo norte θ -y0z _s yo norte γc o s θ )i^+ (y0 añosc o s θ -y0z _s yo norte θ )j^
Sustituyendo valores dey⃗
yy⃗ 0
obtenemos:
0.20720675587654114i^+ 0.9782971739768982j^= ( 0 C o s γ- 1 s yo norte γs yo norte θ - 0 s yo norte γc o s θ )i^+ ( 1 C o s θ - 0 s yo norte θ )j^= - ( s yo norte γs yo norte θ )i^+ ( co s θ ) _j^
Con esta ecuación,θ
yγ
debe poder ser encontrado (utilizando la identidads yo norte θ =1 - co s _2θ−−−−−−−−√
) por las ecuaciones:
c o s θθ- ( s yo norte γs yo norte θ )s yo norte γs yo norte γγ= 0.9782971739768982= co _s− 1( 0.9782971739768982 )= 0.20720675587654114=0.20720675587654114- s yo norte θ=0.20720675587654114±1 -0.97829717397689822−−−−−−−−−−−−−−−−−−−−√= si yonorte− 1(0.20720675587654114±1 -0.97829717397689822−−−−−−−−−−−−−−−−−−−−√)
Sin embargo, cometí un error e hice lo siguiente, que devolvió los ángulos correctos:
- s yo norte θs yo norte θθ- ( s yo norte γs yo norte θ )s yo norte γs yo norte γγ= 0.9782971739768982= − 0,9782971739768982= si yonorte− 1( -0,9782971739768982 ) _= 0.20720675587654114=0.20720675587654114- s yo norte θ=0.207206755876541140.9782971739768982= si yonorte− 1(0.207206755876541140.9782971739768982)
Esto dio los siguientes resultados, que giraron un plano correctamente (con algunos ajustes de signo debido a las orientaciones de rotación del programa):
θγ= −78.04128901169878∘=12.22806234616057∘
Obviamente, cometí un error en alguna parte al verificar mis resultados. ¿Alguien puede ver dónde he cometido el error? Como dije, las ecuaciones equivocadas arrojaron valores correctos, pero las ecuaciones "correctas" arrojaron un error de dominio.
marshall ben jaguar