12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /* updated to FP support 11/99 Markus Neteler */
- /*****************/
- /** gaussurf() **/
- /*****************/
- #include <unistd.h>
- #include <math.h>
- #include <grass/gis.h>
- #include <grass/raster.h>
- #include <grass/gmath.h>
- int gaussurf(char *out, /* Name of raster maps to be opened. */
- double mean, double sigma /* Distribution parameters. */
- )
- {
- int nrows, ncols; /* Number of cell rows and columns */
- DCELL *row_out; /* Buffer just large enough to hold one */
- /* row of the raster map layer. */
- int fd_out; /* File descriptor - used to identify */
- /* open raster maps. */
- struct History history; /* cmd line history metadata */
- int row_count, col_count;
- /****** INITIALISE RANDOM NUMBER GENERATOR ******/
- /* FIXME - allow seed to be specified for repeatability */
- G_math_srand_auto();
- /****** OPEN CELL FILES AND GET CELL DETAILS ******/
- fd_out = Rast_open_new(out, DCELL_TYPE);
- nrows = Rast_window_rows();
- ncols = Rast_window_cols();
- row_out = Rast_allocate_d_buf();
- /****** PASS THROUGH EACH CELL ASSIGNING RANDOM VALUE ******/
- for (row_count = 0; row_count < nrows; row_count++) {
- G_percent(row_count, nrows, 5);
- for (col_count = 0; col_count < ncols; col_count++)
- *(row_out + col_count) =
- (DCELL) (G_math_rand_gauss(sigma) + mean);
- /* Write contents row by row */
- Rast_put_d_row(fd_out, (DCELL *) row_out);
- }
- G_percent(1, 1, 1);
- /****** CLOSE THE CELL FILE ******/
- Rast_close(fd_out);
- Rast_short_history(out, "raster", &history);
- Rast_command_history(&history);
- Rast_write_history(out, &history);
- return 0;
- }
|