readweights.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <grass/gis.h>
  4. #include <grass/glocale.h>
  5. #include "ncb.h"
  6. #include "local_proto.h"
  7. void read_weights(const char *filename)
  8. {
  9. FILE *fp = fopen(filename, "r");
  10. int i, j;
  11. ncb.weights = G_malloc(ncb.nsize * sizeof(DCELL *));
  12. for (i = 0; i < ncb.nsize; i++)
  13. ncb.weights[i] = G_malloc(ncb.nsize * sizeof(DCELL));
  14. if (!fp)
  15. G_fatal_error(_("Unable to open weights file %s"), filename);
  16. for (i = 0; i < ncb.nsize; i++)
  17. for (j = 0; j < ncb.nsize; j++)
  18. if (fscanf(fp, "%lf", &ncb.weights[i][j]) != 1)
  19. G_fatal_error(_("Error reading weights file %s"), filename);
  20. fclose(fp);
  21. }
  22. void gaussian_weights(double sigma)
  23. {
  24. double sigma2 = sigma * sigma;
  25. int i, j;
  26. ncb.weights = G_malloc(ncb.nsize * sizeof(DCELL *));
  27. for (i = 0; i < ncb.nsize; i++)
  28. ncb.weights[i] = G_malloc(ncb.nsize * sizeof(DCELL));
  29. for (i = 0; i < ncb.nsize; i++) {
  30. double y = i - ncb.dist;
  31. for (j = 0; j < ncb.nsize; j++) {
  32. double x = j - ncb.dist;
  33. ncb.weights[i][j] = exp(-(x*x+y*y)/(2*sigma2))/(2*M_PI*sigma2);
  34. }
  35. }
  36. }