mirror of
https://github.com/subsurface/subsurface.git
synced 2025-01-31 20:43:24 +00:00
Fix the deco calculation in the dive planner
The existing code incorrectly started all calculation at the depth at the end of the first segment. So if you went to 50m in 5min in your first segment, you incorrectly got 5 minutes at 50m (instead of a progression from 0 to 50m, over 5 minutes). This commit fixes that and now gives us planned dives that then match what is shown in the profile. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
bad7882ae1
commit
1bec821c73
1 changed files with 5 additions and 3 deletions
|
@ -48,7 +48,7 @@ double tissue_at_end(struct dive *dive, char **cached_datap)
|
|||
{
|
||||
struct divecomputer *dc;
|
||||
struct sample *sample, *psample;
|
||||
int i, j, t0, t1;
|
||||
int i, j, t0, t1, lastdepth;
|
||||
double tissue_tolerance;
|
||||
|
||||
if (!dive)
|
||||
|
@ -63,11 +63,13 @@ double tissue_at_end(struct dive *dive, char **cached_datap)
|
|||
if (!dc->samples)
|
||||
return tissue_tolerance;
|
||||
psample = sample = dc->sample;
|
||||
t0 = 0;
|
||||
lastdepth = t0 = 0;
|
||||
for (i = 0; i < dc->samples; i++, sample++) {
|
||||
t1 = sample->time.seconds;
|
||||
if (i > 0)
|
||||
lastdepth = psample->depth.mm;
|
||||
for (j = t0; j < t1; j++) {
|
||||
int depth = psample->depth.mm + (j - t0) * (sample->depth.mm - psample->depth.mm) / (t1 - t0);
|
||||
int depth = lastdepth + (j - t0) * (sample->depth.mm - lastdepth) / (t1 - t0);
|
||||
tissue_tolerance = add_segment(depth_to_mbar(depth, dive) / 1000.0,
|
||||
&dive->cylinder[sample->sensor].gasmix, 1, sample->po2, dive);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue