]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Improved depth info for dives without samples
authorMikko Rasa <tdb@tdb.fi>
Sun, 29 Jul 2012 09:52:51 +0000 (12:52 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 31 Jul 2012 18:12:19 +0000 (21:12 +0300)
This calculates a mean depth for the dive with a fixed ascent/descent
rate and an assumption that all of the bottom time is at the maximum
depth.  It's not much, but it allows some derived values such as SAC to
make more sense.

The depth profile for such dives is now also generated with the same
assumptions instead of putting the samples at fixed percentages of the
dive duration.

Signed-off-by: Mikko Rasa <tdb@tdb.fi>
dive.c
profile.c

diff --git a/dive.c b/dive.c
index 9f57aed58146554969901198ac761fc888904e18..36ee8e78c496ce88c375edfd001eb9b64f6c43a8 100644 (file)
--- a/dive.c
+++ b/dive.c
@@ -451,7 +451,12 @@ struct dive *fixup_dive(struct dive *dive)
                }
        }
        if (end < 0)
+       {
+               /* Assume an ascent/descent rate of 9 m/min */
+               int asc_desc_time = dive->maxdepth.mm*60/9000;
+               dive->meandepth.mm = dive->maxdepth.mm*(dive->duration.seconds-asc_desc_time)/dive->duration.seconds;
                return dive;
+       }
 
        update_duration(&dive->duration, end - start);
        if (start != end)
index 137ed6f88778c2dea942c2dd377b43dea11497d2..614822809f53dd59bcb6ad2575f51b5e8207e398 100644 (file)
--- a/profile.c
+++ b/profile.c
@@ -1354,12 +1354,15 @@ void plot(struct graphics_context *gc, cairo_rectangle_int_t *drawing_area, stru
        int nr = dive->samples;
 
        if (!nr) {
+               /* The dive has no samples, so create a few fake ones.  This assumes an
+               ascent/descent rate of 9 m/min, which is just below the limit for FAST. */
                int duration = dive->duration.seconds;
                int maxdepth = dive->maxdepth.mm;
+               int asc_desc_time = dive->maxdepth.mm*60/9000;
                sample = fake;
-               fake[1].time.seconds = duration * 0.05;
+               fake[1].time.seconds = asc_desc_time;
                fake[1].depth.mm = maxdepth;
-               fake[2].time.seconds = duration * 0.95;
+               fake[2].time.seconds = duration - asc_desc_time;
                fake[2].depth.mm = maxdepth;
                fake[3].time.seconds = duration * 1.00;
                nr = 4;