mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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.
This commit is contained in:
parent
9d46581913
commit
d6b50e30e4
2 changed files with 7 additions and 4 deletions
9
dive.c
9
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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue