Пример #1
0
/*
  This function takes two points (x1, y1) and (x2, y2) and computes the slope of the
  line that is formed by connecting the two points. The slope of a line is computed
  by calculating the following.

  m = (y2 - y1) / (x2 - x1)
*/
enum SLOPE compute_slope(void** p1, void** p2, float* m){
  int dx;
  int dy;
printf("okay"); 
  div_t d = div((dy = compute_difference((**(point**)p2).y
					 ,(**(point**)p1).y)),  // STONESOUP:CROSSOVER_POINT
		(dx = compute_difference((**(point**)p2).x,
					 (**(point**)p1).x))); // STONESOUP:TRIGGER_POINT
  
  /* If there is a remainder, we need to make sure to convert the integer values to 
     floats, when we divide them, to ensure that we obtain an accurate slope value. 
     There is really not reason to do this normally, but, I wanted to try and make the
     test case more interesting than a simple division operation. 
  */
  printf("ok");
printf("%d,%d",d.rem, d.quot);
  if ( dx != 0 ){
    if ( d.rem == 0 ){
      *m = dy/dx;
    }else{
      *m = ((float)dy)/((float)dx);
    }
    return DEFINED_SLOPE;
  }else{
    /* No need to set m */
    return UNDEFINED_SLOPE;
  }
}
Пример #2
0
void
MYTIME_stop(pmytime pt)
{
  my_assert(pt!=NULL);
  gettimeofday(&(pt->stop), NULL);
  pt->active= false;
  compute_difference(pt);
}
Пример #3
0
// Evaluate difference from identity
double eval_difference(const gsl_vector *v, void *params) {
  // Parameters
  sto_params_t *p=(sto_params_t *)params;

  // Form vector of exponents
  std::vector<double> exps=get_exps(v,p);

  // Compute difference
  double d=compute_difference(exps,p->zeta,p->l);
  //  printf("Computed difference %e.\n",d);

  return d;
}
Пример #4
0
// Evaluate derivative
void eval_difference_df(const gsl_vector *v, void *params, gsl_vector *g) {
  // Parameters
  sto_params_t *p=(sto_params_t *)params;

  // Helper
  gsl_vector *vt=gsl_vector_alloc(v->size);

  // Step size
  double step=1e-4;

  // Loop over parameters
  for(size_t i=0;i<v->size;i++) {
    // Copy vector
    gsl_vector_memcpy(vt,v);

    // Current value
    double x=gsl_vector_get(vt,i);

    // Right trial
    gsl_vector_set(vt,i,x+step);
    double rval=compute_difference(get_exps(vt,p),p->zeta,p->l);

    // Left trial
    gsl_vector_set(vt,i,x-step);
    double lval=compute_difference(get_exps(vt,p),p->zeta,p->l);

    // Set gradient
    gsl_vector_set(g,i,(rval-lval)/(2*step));
  }

  /*
  printf("Gradient:\n");
  for(size_t i=0;i<v->size;i++)
    printf("g(%2i) = % e\n",(int) i, gsl_vector_get(g,i));
  */
}
Пример #5
0
static void
dog (gint32        image_ID,
     GimpDrawable *drawable,
     gdouble       inner,
     gdouble       outer,
     gboolean      show_progress)
{
  GimpDrawable *drawable1;
  GimpDrawable *drawable2;
  gint32        drawable_id = drawable->drawable_id;
  gint32        layer1;
  gint32        layer2;
  gint          width, height;
  gint          x1, y1, x2, y2;
  guchar        maxval = 255;

  gimp_drawable_mask_bounds (drawable_id, &x1, &y1, &x2, &y2);

  width  = (x2 - x1);
  height = (y2 - y1);

  gimp_drawable_flush (drawable);

  layer1 = gimp_layer_copy (drawable_id);
  gimp_drawable_set_visible (layer1, FALSE);
  gimp_drawable_set_name (layer1, "dog_scratch_layer1");
  gimp_image_add_layer (image_ID, layer1, 0);

  layer2 = gimp_layer_copy (drawable_id);
  gimp_drawable_set_visible (layer2, FALSE);
  gimp_drawable_set_name (layer2, "dog_scratch_layer2");
  gimp_image_add_layer (image_ID, layer2, 0);

  drawable1 = gimp_drawable_get (layer1);
  drawable2 = gimp_drawable_get (layer2);

  gauss_rle (drawable1, inner, 0, show_progress);
  gauss_rle (drawable2, outer, 1, show_progress);

  compute_difference (drawable, drawable1, drawable2, &maxval);

  gimp_drawable_detach (drawable1);
  gimp_drawable_detach (drawable2);

  gimp_image_remove_layer (image_ID, layer1);
  gimp_image_remove_layer (image_ID, layer2);

  gimp_drawable_flush (drawable);
  gimp_drawable_merge_shadow (drawable_id, TRUE);
  gimp_drawable_update (drawable_id, x1, y1, width, height);

  if (dogvals.normalize)
    {
      normalize (drawable, maxval);
      gimp_drawable_flush (drawable);
      gimp_drawable_merge_shadow (drawable_id, TRUE);
      gimp_drawable_update (drawable_id, x1, y1, width, height);
    }

  if (dogvals.invert)
    gimp_invert (drawable_id);
}
Пример #6
0
static void
dog (gint32        image_ID,
     GimpDrawable *drawable,
     gdouble       inner,
     gdouble       outer,
     gboolean      show_progress)
{
  GimpDrawable *drawable1;
  GimpDrawable *drawable2;
  gint32        drawable_id = drawable->drawable_id;
  gint32        layer1;
  gint32        layer2;
  gint          width, height;
  gint          x1, y1, x2, y2;
  guchar        maxval = 255;

  gimp_drawable_mask_bounds (drawable_id, &x1, &y1, &x2, &y2);

  width  = (x2 - x1);
  height = (y2 - y1);

  gimp_drawable_flush (drawable);

  layer1 = gimp_layer_copy (drawable_id);
  gimp_item_set_visible (layer1, FALSE);
  gimp_item_set_name (layer1, "dog_scratch_layer1");
  gimp_image_insert_layer (image_ID, layer1,
                           gimp_item_get_parent (drawable_id), 0);

  layer2 = gimp_layer_copy (drawable_id);
  gimp_item_set_visible (layer2, FALSE);
  gimp_item_set_name (layer2, "dog_scratch_layer2");
  gimp_image_insert_layer (image_ID, layer2,
                           gimp_item_get_parent (drawable_id), 0);

  drawable1 = gimp_drawable_get (layer1);
  drawable2 = gimp_drawable_get (layer2);

  gauss_rle (drawable1, inner, 0, show_progress);
  gauss_rle (drawable2, outer, 1, show_progress);

  compute_difference (drawable, drawable1, drawable2, &maxval);

  gimp_drawable_detach (drawable1);
  gimp_drawable_detach (drawable2);

  gimp_image_remove_layer (image_ID, layer1);
  gimp_image_remove_layer (image_ID, layer2);

  gimp_drawable_flush (drawable);
  gimp_drawable_merge_shadow (drawable_id, TRUE);
  gimp_drawable_update (drawable_id, x1, y1, width, height);

  if (dogvals.normalize || dogvals.invert)
    /* gimp_invert doesn't work properly with previews due to shadow handling
     * so reimplement it here - see Bug 557380
     */
    {
      normalize_invert (drawable, dogvals.normalize, maxval, dogvals.invert);
      gimp_drawable_flush (drawable);
      gimp_drawable_merge_shadow (drawable_id, TRUE);
      gimp_drawable_update (drawable_id, x1, y1, width, height);
    }
}