[C con Clase] FW: Resolver Z usando los angulos Horizontal y Vertical

Steven Davidson srd4121 en njit.edu
Jue Ago 27 21:26:56 CEST 2009


Hola Pedro,

Pedro Rodríguez González wrote:
> Q tal chicos, no se cómo andarán de matemáticas, pero yo 
> fatal... Ruborizado 
> 
> No consigo dar con la posición Z para un vector 3D... 
> 
> *Código:*
> ... 
> ... 
>       // obtenemos el angulo en radianes 
>       anguloH=atan2(vista.z-pos.z,vista.x -pos.x); 
>       anguloV=atan2(vista.z-pos.z,vista.y -pos.y); 
>        
>       p.x=radio*cos(anguloH); 
>       p.y=radio*cos(anguloV); 
>       // Que pueo hacer X o Y 
>       //p.z=sin(anguloH); // funciona pero solo en horizontal 
>       //p.z=sin(anguloV); // funciona pero solo en vertical 
> ... 
> ...
> 
> 
> 
> gracias a todo aquel que me aporte una solución sencilla...
> 

Según estoy viendo, quieres crear un vector, p, para que vaya de 'pos' a 
'vista'. Si esto es así, no necesitas hacer todo esto. Simplemente, crea 
el vector a partir de dos puntos; esto es,

p = vista - pos

Por componentes, esto es equivalente a:

p.x = vista.x - pos.x
p.y = vista.y - pos.y
p.z = vista.z - pos.z

Si quieres que la magnitud (o longitud) del vector, p, sea igual a 
'radio', entonces se tratará de una especie de "normalización". Esto es,

p = (radio / ||p||) * p,

donde ||p|| = magnitud del vector p, que se calcula así:
||p|| = radical( (p.x)^2 + (p.y)^2 + (p.z)^2 )

Ahora p tendrá de magnitud 'radio'.


Espero que esto te oriente.

Steven





Más información sobre la lista de distribución Cconclase