/* Prototypes for local functions */ static void mat_unit __PROTO((transform_matrix mat)); static GP_INLINE void draw3d_point_unconditional __PROTO((p_vertex, struct lp_style_type *)); static void mat_unit(transform_matrix mat) { int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) if (i == j) mat[i][j] = 1.0; else mat[i][j] = 0.0; } #if 0 /* HBB 990829: unused --> commented out */ void mat_trans(double tx, double ty, double tz, transform_matrix mat) { mat_unit(mat); /* Make it unit matrix. */ mat[3][0] = tx; mat[3][1] = ty; mat[3][2] = tz; }
void mat_scale(double sx, double sy, double sz, transform_matrix mat) { mat_unit(mat); /* Make it unit matrix. */ mat[0][0] = sx; mat[1][1] = sy; mat[2][2] = sz; }
void mat_rot_x(double teta, transform_matrix mat) { double cos_teta, sin_teta; teta *= DEG2RAD; cos_teta = cos(teta); sin_teta = sin(teta); mat_unit(mat); /* Make it unit matrix. */ mat[1][1] = cos_teta; mat[1][2] = -sin_teta; mat[2][1] = sin_teta; mat[2][2] = cos_teta; }
int mat_inverse(matrix *mat1, matrix mat2){ matrix square; if(check_square(mat2) != 0 || check_square(*mat1) != 0){ return -1; } mat_alloc(&square, mat2.row, mat2.col); mat_unit(&square); mat_solve(mat1, mat2, square); mat_print(square); mat_print(mat2); mat_print(*mat1); return 0; }