123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /****************************************************************************
- ** Written by Maros Zlocha, Jaroslav Hofierka, Helena Mitasova, Winter 1992
- ** Comenius University, Bratislava, Slovakia and
- ** US Army Construction Engineering Research Laboratories, Champaign, IL,USA.
- ** Copyright Maros Zlocha, Jaroslav Hofierka, Helena Mitasova, USA-CERL 1992
- ** Drastically re-engineered by Joshua Caplan, Spring, 1994
- ** Continued improvements by Mark Ruesink, Fall, 1995
- *****************************************************************************/
- /*
- * changes from version 6: lg matrix changed to single cell row buffer
- * x, y components of point structure are now exact coordinates
- * r, c reflect file structure (i.e. r = distance in ns-res units from N)
- * changes from version 7: next_point changed to eliminate arctangent
- * theta and other angles kept in degrees instead of radians
- * changes from version 8: tangents replaced by lookup table
- * bounding box re-introduced to reduce number of truncations
- * changes from version 9: source code split into separate modules
- * aspect optionally computed internally (aspin no longer required)
- * aspect optionally computed on the fly, eliminating o matrix
- * resolution no longer used to compute distances (allows lat/long proj)
- * downslope flag now the default, new options "bound", "-z", "-q" added
- * diagnostic/verbose output --> stderr; debugging output --> stdout
- * epsilon introduced to defeat quantization errors
- * changes from version 10: segmentation "-M" added, "-z" renamed to "-3"
- * further modularization and abstraction
- * changes from version 11: replaced function pointers get, put, ... by macros
- * changes from version 12: updated to read FP data, writing of lg file broken
- * changes from version 13: offset option added, fixed output of FP lg
- */
- #include <math.h>
- #include <grass/gis.h>
- #include <grass/raster.h>
- #include <grass/segment.h>
- #include <grass/vector.h>
- #include <grass/bitmap.h>
- #ifndef hypot
- #define hypot(x,y) (sqrt((x)*(x)+(y)*(y)))
- #endif
- #define ROUND(x) (int) ((x) + 0.5)
- #define D_PI 180.
- #define D2_PI 360.
- #define DEG2RAD M_D2R
- #define UNDEF 365. /* change to undefined when available */
- #define UNDEFZ 0. /* change to undefined when available */
- #define HORIZ 1 /* magic */
- #define VERT 0 /* numbers */
- typedef struct
- {
- char *elevin; /* name of input elevation file */
- char *aspin; /* name of input aspect file */
- char *barin; /* name of barrier input file */
- char *flout; /* name of output flowline file */
- char *lgout; /* name of output length file */
- char *dsout; /* name of output density file */
- int skip; /* cells between flowlines output */
- int bound; /* constant bound on path length */
- /* double offset; magnitude of random grid offset */
- char up; /* direction to compute lines */
- char l3d; /* three-dimensional length */
- char mem; /* always recompute aspect */
- char seg; /* use segmented arrays */
- }
- params;
- typedef struct
- {
- DCELL **buf; /* internal row storage */
- SEGMENT *seg; /* state for segment library */
- int sfd; /* file descriptor for segment file */
- int row_offset, /* border widths of buf (for */
- col_offset; /* extrapolating border data) */
- char *name; /* for error messages */
- }
- layer;
- /******************************* GLOBALS ********************************/
- extern struct Cell_head region;
- extern struct Map_info fl;
- extern struct BM *bitbar;
- extern int lgfd;
- extern char string[1024];
- extern layer el, as, ds;
- extern double *ew_dist;
- extern double *epsilon[2];
- extern params parm;
|