That's better
This commit is contained in:
		
							parent
							
								
									d5294e111d
								
							
						
					
					
						commit
						b818671816
					
				
					 1 changed files with 30 additions and 2 deletions
				
			
		| 
						 | 
					@ -1,6 +1,14 @@
 | 
				
			||||||
import math
 | 
					import math
 | 
				
			||||||
import cairo
 | 
					import cairo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PRESSURE_MAX  = 1050 # millibar
 | 
				
			||||||
 | 
					PRESSURE_MIN  =  100
 | 
				
			||||||
 | 
					PRESSURE_STEP =   50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PRESSURE_LOG_MAX   = math.log(PRESSURE_MAX)
 | 
				
			||||||
 | 
					PRESSURE_LOG_MIN   = math.log(PRESSURE_MIN)
 | 
				
			||||||
 | 
					PRESSURE_LOG_RANGE = PRESSURE_LOG_MAX - PRESSURE_LOG_MIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEMP_CENTER = 0 # degrees C
 | 
					TEMP_CENTER = 0 # degrees C
 | 
				
			||||||
TEMP_STEP   = 5
 | 
					TEMP_STEP   = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,8 +46,27 @@ class SkewT():
 | 
				
			||||||
    def graph_to_screen(self, x, y) -> tuple:
 | 
					    def graph_to_screen(self, x, y) -> tuple:
 | 
				
			||||||
        return (self.width / 2) + x, self.height - y
 | 
					        return (self.width / 2) + x, self.height - y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def draw_pressure_lines(self, cr: cairo.Context):
 | 
					    def pressure_y(self, pressure: float) -> float:
 | 
				
			||||||
        pass
 | 
					        log_p  = math.log(clamp(pressure, PRESSURE_MIN, PRESSURE_MAX))
 | 
				
			||||||
 | 
					        factor = (PRESSURE_LOG_MAX - log_p) / PRESSURE_LOG_RANGE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return factor * self.height
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def sample_to_graph(self, temp: float, pressure: float):
 | 
				
			||||||
 | 
					        x = (temp / TEMP_STEP) * self.temp_step_width
 | 
				
			||||||
 | 
					        y = self.pressure_y(pressure)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return x + y, y
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def draw_pressure_lines(self, cr: cairo.Context, x: float, y: float):
 | 
				
			||||||
 | 
					        for pressure in range(PRESSURE_MIN, PRESSURE_MAX+1, PRESSURE_STEP):
 | 
				
			||||||
 | 
					            coord = self.graph_to_screen(-self.width / 2,
 | 
				
			||||||
 | 
					                                         self.pressure_y(pressure))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            cr.set_source_rgba(0, 0, 0, 0.5)
 | 
				
			||||||
 | 
					            cr.move_to(x + coord[0], y + coord[1])
 | 
				
			||||||
 | 
					            cr.rel_line_to(self.width, 0)
 | 
				
			||||||
 | 
					            cr.stroke()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def draw_isotherms(self, cr: cairo.Context, x: float, y: float):
 | 
					    def draw_isotherms(self, cr: cairo.Context, x: float, y: float):
 | 
				
			||||||
        cr.set_source_rgba(0.1, 0.5, 0.1, 0.8)
 | 
					        cr.set_source_rgba(0.1, 0.5, 0.1, 0.8)
 | 
				
			||||||
| 
						 | 
					@ -59,3 +86,4 @@ class SkewT():
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def draw(self, cr: cairo.Context, x: float, y: float):
 | 
					    def draw(self, cr: cairo.Context, x: float, y: float):
 | 
				
			||||||
        self.draw_isotherms(cr, x, y)
 | 
					        self.draw_isotherms(cr, x, y)
 | 
				
			||||||
 | 
					        self.draw_pressure_lines(cr, x, y)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue