Logo

¡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.
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.