// Compute <ui, uj>. static real_t inner_product(div_free_poly_basis_t* basis, polynomial_vector_t* ui, polynomial_vector_t* uj) { // Compute the polynomial that is the dot product of ui and uj. polynomial_t* prod = polynomial_product(ui->x, uj->x); polynomial_t* y_prod = polynomial_product(ui->y, uj->y); polynomial_t* z_prod = polynomial_product(ui->z, uj->z); polynomial_add(prod, 1.0, y_prod); polynomial_add(prod, 1.0, z_prod); y_prod = z_prod = NULL; // Now integrate this product over our polytope. ASSERT(basis->polytope == SPHERE); real_t I = sphere_integrator_sphere(NULL, &basis->x0, basis->radius, prod); prod = NULL; return I; }
Polynomial* polynomial_power(const Polynomial *polynomial, int power) { assert(polynomial != NULL); assert(power > 0); Polynomial *result = polynomial_copy(polynomial); while(power > 1) { Polynomial *tmp = result; result = polynomial_product(result, polynomial); if(tmp != polynomial) { polynomial_free(&tmp); } power--; } return result; }