typedef float matrix[16]; typedef float **matrixNxM; typedef float **matrix3x3; typedef float *vector3; #define vector3_norm(A) sqrt(A[0]*A[0]+A[1]*A[1]+A[2]*A[2]); matrix3x3 matrix3x3_allocate(); void matrix3x3_deallocate(matrix3x3 m); void matrix3x3_set_identity(matrix3x3 m); void matrix3x3_load(matrix3x3,float,float,float,float,float,float,float,float,float); void matrix3x3_transpose(matrix3x3,matrix3x3); matrix3x3 matrix3x3_duplicate(matrix3x3 m); float matrix3x3_cofactor(matrix3x3 m,int i,int j); float matrix3x3_determinant(matrix3x3 m); void matrix3x3_inverse(matrix3x3,matrix3x3); void matrix3x3_copy(matrix3x3 m1,matrix3x3 m2); void matrix3x3_set_x_rotate(matrix3x3 m,float angle); void matrix3x3_set_y_rotate(matrix3x3 m,float angle); void matrix3x3_set_z_rotate(matrix3x3 m,float angle); void matrix3x3_multiply(matrix3x3,matrix3x3,matrix3x3); void matrix3x3_multiply_vector(vector3,matrix3x3,vector3); void vector3_rigid_transform(vector3,vector3,matrix3x3,vector3); void matrix3x3_print(matrix3x3 a); void matrix_set_identity(matrix m); void matrix_set_scale(matrix m,float sx,float sy,float sz); void matrix_set_translate(matrix m,float tx,float ty,float tz); void matrix_concatenate_translate(matrix m,float tx,float ty,float tz); void matrix_set_x_rotate(matrix m,float angle); void matrix_set_y_rotate(matrix m,float angle); void matrix_set_z_rotate(matrix m,float angle); void matrix_multiply(matrix a,matrix b,matrix c); void matrix_multiply_NxM(matrixNxM a,matrixNxM b,matrixNxM c,int n, int m, int p);