c_intr.c 618 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include <grass/gis.h>
  2. #include <grass/raster.h>
  3. #include <grass/stats.h>
  4. void c_intr(DCELL * result, DCELL * values, int n, const void *closure)
  5. {
  6. DCELL center;
  7. int count;
  8. int diff;
  9. int i;
  10. if (Rast_is_d_null_value(&values[n / 2])) {
  11. Rast_set_d_null_value(result, 1);
  12. return;
  13. }
  14. center = values[n / 2];
  15. count = 0;
  16. diff = 0;
  17. for (i = 0; i < n; i++) {
  18. if (Rast_is_d_null_value(&values[i]))
  19. continue;
  20. count++;
  21. if (values[i] != center)
  22. diff++;
  23. }
  24. count--;
  25. if (count <= 0)
  26. *result = 0;
  27. else
  28. *result = (diff * 100.0 + (count / 2)) / count + 1;
  29. }