meteo_tools/calculations/
heat_index.rs

1use crate::constants::constants::ROTHFUSZ_COEFS;
2use crate::{celsius_to_fahrenheit, fahrenheit_to_celsius, meteo_round};
3
4/// Calculates heat index based on Rothfusz regression equation for Fahrenheits.
5///
6/// Returns degrees of Fahrenheit
7///
8/// # Examples
9///
10/// ```
11/// let temperature = 72.5;
12/// let relative_humidity = 62.4;
13/// let result = 75.9737;
14///
15/// let heat_index = meteo_tools::fahrenheit_heat_index(&temperature, &relative_humidity);
16///
17/// assert_eq!(heat_index, result);
18/// ```
19pub fn fahrenheit_heat_index(temperature: &f64, relative_humidity: &f64) -> f64 {
20    let heat_index = ROTHFUSZ_COEFS[0]
21        + ROTHFUSZ_COEFS[1] * temperature
22        + ROTHFUSZ_COEFS[2] * relative_humidity
23        + ROTHFUSZ_COEFS[3] * temperature * relative_humidity
24        + ROTHFUSZ_COEFS[4] * temperature.powi(2)
25        + ROTHFUSZ_COEFS[5] * relative_humidity.powi(2)
26        + ROTHFUSZ_COEFS[6] * temperature.powi(2) * relative_humidity
27        + ROTHFUSZ_COEFS[7] * temperature * relative_humidity.powi(2)
28        + ROTHFUSZ_COEFS[8] * temperature.powi(2) * relative_humidity.powi(2);
29    meteo_round(&heat_index)
30}
31
32/// Calculates heat index based on Rothfusz regression equation for Celsius.
33///
34/// Returns degrees of Fahrenheit
35///
36/// # Examples
37///
38/// ```
39/// let temperature = 22.5;
40/// let relative_humidity = 62.4;
41/// let result = 24.4298;
42///
43/// let heat_index = meteo_tools::celsius_heat_index(&temperature, &relative_humidity);
44///
45/// assert_eq!(heat_index, result);
46/// ```
47pub fn celsius_heat_index(temperature: &f64, relative_humidity: &f64) -> f64 {
48    let fahrenheit_temperature = celsius_to_fahrenheit(temperature);
49    let heat_index = fahrenheit_heat_index(&fahrenheit_temperature, relative_humidity);
50    let fahrenheit_heat_index = fahrenheit_to_celsius(&heat_index);
51    meteo_round(&fahrenheit_heat_index)
52}