c_median.c 723 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #include <grass/gis.h>
  2. #include <grass/raster.h>
  3. #include <grass/stats.h>
  4. void c_median(DCELL * result, DCELL * values, int n, const void *closure)
  5. {
  6. n = sort_cell(values, n);
  7. if (n < 1)
  8. Rast_set_d_null_value(result, 1);
  9. else
  10. *result = (values[(n - 1) / 2] + values[n / 2]) / 2;
  11. }
  12. void w_median(DCELL * result, DCELL(*values)[2], int n, const void *closure)
  13. {
  14. DCELL total;
  15. int i;
  16. DCELL k;
  17. n = sort_cell_w(values, n);
  18. if (n < 1) {
  19. Rast_set_d_null_value(result, 1);
  20. return;
  21. }
  22. total = 0.0;
  23. for (i = 0; i < n; i++)
  24. total += values[i][1];
  25. k = 0.0;
  26. for (i = 0; i < n; i++) {
  27. k += values[i][1];
  28. if (k >= total / 2)
  29. break;
  30. }
  31. *result = values[i][0];
  32. }