[GRASS-SVN] r62327 - grass/trunk/raster/r.profile

svn_grass at osgeo.org svn_grass at osgeo.org
Tue Oct 21 12:24:01 PDT 2014


Author: annakrat
Date: 2014-10-21 12:24:00 -0700 (Tue, 21 Oct 2014)
New Revision: 62327

Modified:
   grass/trunk/raster/r.profile/main.c
Log:
r.profile: simplify computation based on Glynn's suggestions to avoid infinity values

Modified: grass/trunk/raster/r.profile/main.c
===================================================================
--- grass/trunk/raster/r.profile/main.c	2014-10-21 17:50:08 UTC (rev 62326)
+++ grass/trunk/raster/r.profile/main.c	2014-10-21 19:24:00 UTC (rev 62327)
@@ -273,7 +273,7 @@
 	       char *null_string, const char *unit, double factor)
 {
     double rows, cols, LEN;
-    double Y, X, AZI;
+    double Y, X, k;
 
     cols = e1 - e2;
     rows = n1 - n2;
@@ -292,18 +292,20 @@
 	read_rast(e, n, dist / factor, fd, coords, data_type, fp, null_string);
     }
 
+    k = res / hypot(rows, cols);
+    Y = k * rows;
+    X = k * cols;
+    if (Y < 0)
+        Y = Y * -1.;
+    if (X < 0)
+        X = X * -1.;
+
+    if (e != 0.0 && (e != e1 || n != n1)) {
+        dist -= G_distance(e, n, e1, n1);
+    }
+
     if (rows >= 0 && cols < 0) {
 	/* SE Quad or due east */
-	AZI = atan((rows / cols));
-	Y = res * sin(AZI);
-	X = res * cos(AZI);
-	if (Y < 0)
-	    Y = Y * -1.;
-	if (X < 0)
-	    X = X * -1.;
-	if (e != 0.0 && (e != e1 || n != n1)) {
-	    dist -= G_distance(e, n, e1, n1);
-	}
 	for (e = e1, n = n1; e < e2 || n > n2; e += X, n -= Y) {
 	    read_rast(e, n, dist / factor, fd, coords, data_type, fp, null_string);
 	    /* d+=res; */
@@ -313,19 +315,6 @@
 
     if (rows < 0 && cols <= 0) {
 	/* NE Quad  or due north */
-	AZI = atan((cols / rows));
-	X = res * sin(AZI);
-	Y = res * cos(AZI);
-	if (Y < 0)
-	    Y = Y * -1.;
-	if (X < 0)
-	    X = X * -1.;
-	if (e != 0.0 && (e != e1 || n != n1)) {
-	    dist -= G_distance(e, n, e1, n1);
-	    /*
-	     * read_rast (e1, n1, dist, fd, coords, data_type, fp, null_string);
-	     */
-	}
 	for (e = e1, n = n1; e < e2 || n < n2; e += X, n += Y) {
 	    read_rast(e, n, dist / factor, fd, coords, data_type, fp, null_string);
 	    /* d+=res; */
@@ -335,16 +324,6 @@
 
     if (rows > 0 && cols >= 0) {
 	/* SW Quad or due south */
-	AZI = atan((rows / cols));
-	X = res * cos(AZI);
-	Y = res * sin(AZI);
-	if (Y < 0)
-	    Y = Y * -1.;
-	if (X < 0)
-	    X = X * -1.;
-	if (e != 0.0 && (e != e1 || n != n1)) {
-	    dist -= G_distance(e, n, e1, n1);
-	}
 	for (e = e1, n = n1; e > e2 || n > n2; e -= X, n -= Y) {
 	    read_rast(e, n, dist / factor, fd, coords, data_type, fp, null_string);
 	    /* d+=res; */
@@ -354,16 +333,6 @@
 
     if (rows <= 0 && cols > 0) {
 	/* NW Quad  or due west */
-	AZI = atan((rows / cols));
-	X = res * cos(AZI);
-	Y = res * sin(AZI);
-	if (Y < 0)
-	    Y = Y * -1.;
-	if (X < 0)
-	    X = X * -1.;
-	if (e != 0.0 && (e != e1 || n != n1)) {
-	    dist -= G_distance(e, n, e1, n1);
-	}
 	for (e = e1, n = n1; e > e2 || n < n2; e -= X, n += Y) {
 	    read_rast(e, n, dist / factor, fd, coords, data_type, fp, null_string);
 	    /* d+=res; */



More information about the grass-commit mailing list