/** * B N _ M A T _ I N V * * The matrix pointed at by "input" is inverted and stored in the area * pointed at by "output". * * Calls bu_bomb if matrix is singular. */ void bn_mat_inv(register mat_t output, const mat_t input) { if (bn_mat_inverse(output, input) == 0) { bu_log("bn_mat_inv: error!"); bn_mat_print("singular matrix", input); bu_bomb("bn_mat_inv: singular matrix\n"); /* NOTREACHED */ } }
static int test_bn_mat_inverse(int argc, char *argv[]) { mat_t m, expected, actual; int singular; sscanf(argv[2], "%d", &singular); if ((argc == 4 && !singular) || (argc != 4 && argc != 5)) { bu_exit(1, "<args> format: 0|1 M [expected_result] [%s]\n", argv[0]); } scan_mat_args(argv, 3, &m); if (!singular) { scan_mat_args(argv, 4, &expected); } if (!bn_mat_inverse(actual, m)) { return !singular; } return !mat_equal(expected, actual); }