Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Rotación de un vector

Iniciado por misscelan, 05 de Junio de 2007, 09:47:23 AM

« anterior - próximo »

misscelan

Hola,

Tengo un vector dirección (vDir) al que le he aplicado unos cambios. Tengo un punto de origen (vStart) y un punto final (vEnd).

Después de calcular unos cambios para vDir, vEnd lo calculo así

vEnd.x = vStart.x + Radio * vDir.x;
vEnd.y = vStart.y + Radio * vDir.y;
vEnd.z = vStart.z + Radio * vDir.z;


Ahora lo que quería conseguir es rotar vDir sobre el eje Y unos determinador grados y volver a calcular vEnd.

La rotación sobre el eje Y la hago así:

vDir.x  =  (vDir.z * cos(ang_rad)) - (vDir.x * sin(ang_rad));//y
vDir.z  =  (vDir.x * cos(ang_rad)) + (vDir.z * sin(ang_rad));


El caso es que así parece que las cosas no funcionan, sin embargo si hago esto funciona perfectamente:

vEnd.x = Radio * vDir.x;
vEnd.y = Radio * vDir.y;
vEnd.z = Radio * vDir.z;

glPushMatrix();
   glTranslatef(vStart.x, vStart..y, vStart..z);
   glRotatef(angle, 0.0, 1.0, 0.0);
   glBegin(GL_LINES);
        glVertex3f(0, 0, 0);
        glVertex3f(vEnd.x, vEnd.y, vEnd.z);
  glEnd();
glPopMatrix();

Aquí realmente roto el punto final no el vector pero rotando vEnd directamente por código tampoco lo consigo.

Alguien me puede echar una mano.

Gracias y un saludo

Titonus

Suponiendo que las ecuaciones de rotación del eje Y que tienes están bien, el error podrías tenerlo en que estás usando el valor modificado de vDir.x para calcular vDir.z en vez del vDir.x original.

Haciendo algo parecido a esto podría solucionarse si es este el problema:

VECTOR vTemporal = vDir;
vTemporal.x  =  (vDir.z * cos(ang_rad)) - (vDir.x * sin(ang_rad));//y
vTemporal.z  =  (vDir.x * cos(ang_rad)) + (vDir.z * sin(ang_rad));

vDir = vTemporal;







Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.