Question on pfCoords & pfMatrixs

New Message Reply Date view Thread view Subject view Author view

Hill_Brian++at++amelnx.advmar.com
> 08 Dec 95 17:50:03 EST


     Hi,
      
     I was trying to convert pfmatrix notation to pfcoord notation and I
     found something I don't understand. I've included the code below.
      
     I create a matrix to rotate 90 degrees about the x axis using
     pfMakeEulerMat (mat, 0.0f, 90.0f, 0.0f). It creates the following
     matrix:
      
           1.000 0.000 0.000 0.000
           0.000 0.000 1.000 0.000
           0.000 -1.000 0.000 0.000
           0.000 0.000 0.000 1.000

     I call pfGetOrthoMatCoord (...) to translate it to pfcoord notation
     and get the following:

        x 0.000 y 0.000 z 0.000 h 0.000 p 90.000 r 90.000
                                                       ^^^^^^
     I expected to get:

        x 0.000 y 0.000 z 0.000 h 0.000 p 90.000 r 0.000
                                                        ^^^^^
     When I call pfMakeCoordMat (...) using

        x 0.000 y 0.000 z 0.000 h 0.000 p 90.000 r 90.000

     I get the following matrix:

           0.000 1.000 0.000 0.000
           0.000 0.000 1.000 0.000
           1.000 0.000 0.000 0.000
           0.000 0.000 0.000 1.000

    Again, I call pfGetOrthoMatCoord (...) to translate the above matrix to
    pfcoord notation and get the following:

        x 0.000 y 0.000 z 0.000 h 0.000 p 90.000 r 0.000
                                                        ^^^^^
     Why do they change back and forth like this?

     Thanks,

     Brian Hill
     hill_brian++at++advmar.com

==============================================================================
#include <stdlib.h>
#include <stdio.h>
#include <Performer/pf.h>
#include <Performer/pr.h>

void main (void)
{
   pfMatrix mat;
   pfCoord crd;
   int i;

   /* matrix to rotate 90 degrees about x axis (pitch) */
   pfMakeEulerMat (mat, 0.0f, 90.0f, 0.0f);

   printf ("======= Euler Mat 90 deg x axis =======\n");

   /* print the matrix elements */
   for (i=0; i<4; i++)
      printf ("\t%8.3f %8.3f %8.3f %8.3f\n",
              mat[i][0],mat[i][1],mat[i][2],mat[i][3]);

   /* get coord representation of matrix */
   pfGetOrthoMatCoord (mat, &crd);

   printf ("======= Coords of same matrix =======\n");

   /* print the coord elements */
   printf ("\tx %6.3f y %6.3f z %6.3f h %6.3f p %6.3f r %6.3f\n",
           crd.xyz[0], crd.xyz[1], crd.xyz[2],
           crd.hpr[0], crd.hpr[1], crd.hpr[2]);

   /* get matrix representation of coord */
   pfMakeCoordMat (mat, &crd);

   printf ("======= Matrix from Coords =======\n");

   /* print the matrix elements */
   for (i=0; i<4; i++)
      printf ("\t%8.3f %8.3f %8.3f %8.3f\n",
              mat[i][0],mat[i][1],mat[i][2],mat[i][3]);

   /* get coord representation of matrix */
   pfGetOrthoMatCoord (mat, &crd);

   printf ("======= Coords of same matrix =======\n");

   /* print the coord elements */
   printf ("\tx %6.3f y %6.3f z %6.3f h %6.3f p %6.3f r %6.3f\n",
           crd.xyz[0], crd.xyz[1], crd.xyz[2],
           crd.hpr[0], crd.hpr[1], crd.hpr[2]);

}


New Message Reply Date view Thread view Subject view Author view

This archive was generated by hypermail 2.0b2 on Mon Aug 10 1998 - 17:52:07 PDT

This message has been cleansed for anti-spam protection. Replace '++at++' in any mail addresses with the '@' symbol.