c_median.c 649 B

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