/*
  call-seq:
    f.distance(x,y) -> a_number
    f.distance(x,y, xscale, yscale) -> a_number
  
  Returns the distance of the function to the given point. Optionnal
  xscale and yscale says by how much we should divide the x and y
  coordinates before computing the distance. Use it if the distance is not
  homogeneous.
*/

static VALUE function_distance(int argc, VALUE *argv, VALUE self)
{
  switch(argc)
    {
    case 2:
      return rb_float_new(private_function_distance(self, 
                                                    NUM2DBL(argv[0]),
                                                    NUM2DBL(argv[1]),
                                                    1.0,1.0,NULL));
    case 4:
      return rb_float_new(private_function_distance(self, 
                                                    NUM2DBL(argv[0]),
                                                    NUM2DBL(argv[1]),
                                                    NUM2DBL(argv[2]),
                                                    NUM2DBL(argv[3]),
                                                    NULL));
    default:
      rb_raise(rb_eArgError, "distance should have 2 or 4 parameters");
    }
  return Qnil;
}