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
		Add a link
		
	
		Reference in a new issue