// 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;
}
Example #2
0
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;
}