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

Pedro Rodríguez González sr.whiteskull en hotmail.com
Jue Ago 27 22:05:25 CEST 2009


Creo q no me expliqué claramente Steve, pero gracias por responder, el tema es que estoy desarrollando una aplicación 3d (casi no hace falta ni que lo mencione), y tengo una "camara", en las posicion pos(vector3D), que a su vez apunta a las coordenadas vista(vector3D), sólo con estos datos "podría" colocar un elemento orbitando alrededor de la cámara, de ahí que use un vector de coordenadas p, si sólo fuera que girara alrededor cómo la "Luna" sobre la "Tierra", eso es algo que está chupao... y es lo que muestro en el código, pero realmente lo que necesito es que ese objeto se mantenga fijo delante de la vista de la cámara, mire a donde mire... en éste esquema "chapucilla" se puede apreciar más o menos la idea.
Y claro no lo consigo, hace un par de años buenos lo hice, se que era así más o menos, pero todo los trabajos que hice hace años se quedaron en el portátil desguazado que regalé al instituto (para su estudio)... 

Si no me equivoco, ||p|| = radical( (p.x)^2 + (p.y)^2 + (p.z)^2 ) esta formula me devuelve la distancia entre dos vectores, no habré usado ni pocas veces ni nada...
> Date: Thu, 27 Aug 2009 15:26:56 -0400
> From: srd4121 en njit.edu
> To: cconclase en listas.conclase.net
> Subject: Re: [C con Clase] FW: Resolver Z usando los angulos Horizontal y Vertical
> 
> 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
> 
> 
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

_________________________________________________________________
News, entertainment and everything you care about at Live.com. Get it now!
http://www.live.com/getstarted.aspx
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20090827/6fe1f1a7/attachment.html>


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