From: Mikko Rasa Date: Wed, 29 Aug 2012 16:10:26 +0000 (+0300) Subject: Fix profile and average depth for freedives X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;ds=sidebyside;p=ext%2Fsubsurface.git Fix profile and average depth for freedives Freedives can easily exceed the assumed ascent/descent rate, which results in wacky dive profiles. Add a check to make the ascent and descent fit within the duration of the dive. --- diff --git a/dive.c b/dive.c index aee09d5..54784cd 100644 --- a/dive.c +++ b/dive.c @@ -478,11 +478,12 @@ struct dive *fixup_dive(struct dive *dive) int asc_desc_time = depth*60/9000; int duration = dive->duration.seconds; - /* Protect against insane dives - make mean be half of max */ - if (duration <= asc_desc_time) { + /* Some sanity checks against insane dives */ + if (duration < 2) duration = 2; - asc_desc_time = 1; - } + if (asc_desc_time * 2 >= duration) + asc_desc_time = duration/2; + dive->meandepth.mm = depth*(duration-asc_desc_time)/duration; return dive; } diff --git a/profile.c b/profile.c index d4e88c0..0039867 100644 --- a/profile.c +++ b/profile.c @@ -1387,6 +1387,8 @@ void plot(struct graphics_context *gc, cairo_rectangle_int_t *drawing_area, stru int duration = dive->duration.seconds; int maxdepth = dive->maxdepth.mm; int asc_desc_time = dive->maxdepth.mm*60/9000; + if (asc_desc_time * 2 >= duration) + asc_desc_time = duration / 2; sample = fake; fake[1].time.seconds = asc_desc_time; fake[1].depth.mm = maxdepth;