| 1 | 2 | specular | //=======================================================================
 | 
      
         | 2 |  |  | // Project Monophony
 | 
      
         | 3 |  |  | //   Wire-Frame 3D Graphics Accelerator IP Core
 | 
      
         | 4 |  |  | //
 | 
      
         | 5 |  |  | // File:
 | 
      
         | 6 |  |  | //   mp_matrix3.h
 | 
      
         | 7 |  |  | //
 | 
      
         | 8 |  |  | // Abstract:
 | 
      
         | 9 |  |  | //   matrix3 class header
 | 
      
         | 10 |  |  | //
 | 
      
         | 11 |  |  | // Author:
 | 
      
         | 12 |  |  | //   Kenji Ishimaru (kenji.ishimaru@prtissimo.com)
 | 
      
         | 13 |  |  | //
 | 
      
         | 14 |  |  | //======================================================================
 | 
      
         | 15 |  |  | //
 | 
      
         | 16 |  |  | // Copyright (c) 2015, Kenji Ishimaru
 | 
      
         | 17 |  |  | // All rights reserved.
 | 
      
         | 18 |  |  | //
 | 
      
         | 19 |  |  | // Redistribution and use in source and binary forms, with or without
 | 
      
         | 20 |  |  | // modification, are permitted provided that the following conditions are met:
 | 
      
         | 21 |  |  | //
 | 
      
         | 22 |  |  | //  -Redistributions of source code must retain the above copyright notice,
 | 
      
         | 23 |  |  | //   this list of conditions and the following disclaimer.
 | 
      
         | 24 |  |  | //  -Redistributions in binary form must reproduce the above copyright notice,
 | 
      
         | 25 |  |  | //   this list of conditions and the following disclaimer in the documentation
 | 
      
         | 26 |  |  | //   and/or other materials provided with the distribution.
 | 
      
         | 27 |  |  | //
 | 
      
         | 28 |  |  | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | 
      
         | 29 |  |  | // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 | 
      
         | 30 |  |  | // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 | 
      
         | 31 |  |  | // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 | 
      
         | 32 |  |  | // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | 
      
         | 33 |  |  | // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | 
      
         | 34 |  |  | // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 | 
      
         | 35 |  |  | // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 | 
      
         | 36 |  |  | // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
 | 
      
         | 37 |  |  | // OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 | 
      
         | 38 |  |  | // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
      
         | 39 |  |  | //
 | 
      
         | 40 |  |  | // Revision History
 | 
      
         | 41 |  |  |  
 | 
      
         | 42 |  |  | #ifndef __MP_MATRIX3_H__
 | 
      
         | 43 |  |  | #define __MP_MATRIX3_H__
 | 
      
         | 44 |  |  |  
 | 
      
         | 45 |  |  | #include "mp_vector3.h"
 | 
      
         | 46 |  |  | #include "mp_vector4.h"
 | 
      
         | 47 |  |  |  
 | 
      
         | 48 |  |  | typedef struct _mp_matrix3 {
 | 
      
         | 49 |  |  |     float a[9];
 | 
      
         | 50 |  |  | } mp_matrix3;
 | 
      
         | 51 |  |  |  
 | 
      
         | 52 |  |  | // functions
 | 
      
         | 53 |  |  | void mp_matrix3_init(mp_matrix3 *dst);
 | 
      
         | 54 |  |  | void mp_matrix3_set0(mp_matrix3 *dst, float b[]);
 | 
      
         | 55 |  |  | void mp_matrix3_set1(mp_matrix3 *dst, float a0,  float a1,  float a2,
 | 
      
         | 56 |  |  |                                       float a3,  float a4,  float a5,
 | 
      
         | 57 |  |  |                                       float a6,  float a7,  float a8 );
 | 
      
         | 58 |  |  | void mp_matrix3_set2(mp_matrix3 *dst, mp_matrix3 *t);
 | 
      
         | 59 |  |  |  
 | 
      
         | 60 |  |  | float mp_matrix3_determinant0(mp_matrix3 *dst);
 | 
      
         | 61 |  |  | float mp_matrix3_determinant1(
 | 
      
         | 62 |  |  |          float a0,  float a1,  float a2,
 | 
      
         | 63 |  |  |          float a3,  float a4,  float a5,
 | 
      
         | 64 |  |  |          float a6,  float a7,  float a8);
 | 
      
         | 65 |  |  | void mp_matrix3_multiply_vector30(mp_vector3 *dst,mp_matrix3 *m,  mp_vector3 *v);
 | 
      
         | 66 |  |  | void mp_matrix3_multiply(mp_matrix3 *dst, mp_matrix3 *b);
 | 
      
         | 67 |  |  | void mp_matrix3_inverse(mp_matrix3 *dst);
 | 
      
         | 68 |  |  | void mp_matrix3_rotate0(mp_matrix3 *dst, mp_vector3 *v,  float theta);
 | 
      
         | 69 |  |  | void mp_matrix3_rotate1(mp_matrix3 *dst, float dx,  float dy,
 | 
      
         | 70 |  |  |                                          float dz,  float theta);
 | 
      
         | 71 |  |  | void mp_matrix3_rotate2(mp_matrix3 *dst, mp_vector4 *v);
 | 
      
         | 72 |  |  | void show(mp_matrix3 *dst);
 | 
      
         | 73 |  |  |     // | a[0] a[1] a[2] |
 | 
      
         | 74 |  |  |     // | a[3] a[4] a[5] |
 | 
      
         | 75 |  |  |     // | a[6] a[7] a[8] |
 | 
      
         | 76 |  |  |  
 | 
      
         | 77 |  |  | #endif
 |