WindchillIndex::setTemp()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 5
ccs 3
cts 3
cp 1
rs 9.4285
cc 1
eloc 3
nc 1
nop 1
crap 1
1
<?php
2
/**
3
 *
4
 * PHP version 5.5
5
 *
6
 * @package Forecast\Models
7
 * @author  Sergey V.Kuzin <[email protected]>
8
 * @license MIT
9
 */
10
declare(strict_types=1);
11
namespace Forecast\Models;
12
13
/**
14
 * Class WindchillIndex
15
 *
16
 * PHP version 5.5
17
 *
18
 * @package Forecast\Models
19
 * @author  Sergey V.Kuzin <[email protected]>
20
 * @license http://opensource.org/licenses/MIT The MIT License (MIT)
21
 *
22
 *
23
24
25
Зачем надо знать ветрохолодовый индекс? Для того чтобы адекватно оценивать мороз, одеваться и вести себя соответственно. Environment Canada составила следующую таблицу
26
27
Ветро-холодовый индекс от 0 до -9
28
Небольшой риск, некоторый дискомфорт
29
Рекомендуется тепло одеваться и оставаться сухим.
30
31
Ветро-холодовый индекс от -10 до -27
32
Дискомфорт, риск гипотермии в случае продолжительного нахождения на воздухе без соответствующей защиты.
33
Рекомендуется одеваться в несколько слоев теплой одежды, внешний слой не должен пропускать ветра. Рекомендуется носить шапку, варежки или перчатки, шарф и закрытую, непромокаемую обувь.
34
Надо оставаться сухим и на морозе двигаться.
35
36
Ветро-холодовый индекс от -28 до -39
37
Открытая кожа может замерзнуть в течении 10-30 минут. Существует риск обморожения: требуется проверять лицо, открытые участки кожи и конечности на окоченение и побеление. Риск гипотермии в случае продолжительного нахождения на воздухе без соответствующей одежды или укрытия от холода и ветра.
38
Рекомендуется одеваться в несколько слоев теплой одежды, внешний слой не должен пропускать ветра. Рекомендуется не оставлять открытых участков кожи. Рекомендуется носить шапку, варежки или перчатки, шарф, маску и закрытую, непромокаемую обувь. Надо оставаться сухим и на морозе двигаться.
39
40
Ветро-холодовый индекс от -40 до -47
41
Открытая кожа может замерзнуть в течении 5-10 минут. Высокий риск обморожения: требуется проверять лицо, открытые участки кожи и конечности на окоченение и побеление. Риск гипотермии в случае продолжительного нахождения на воздухе без соответствующей одежды или укрытия от холода и ветра.
42
Рекомендуется одеваться в несколько слоев теплой одежды, внешний слой не должен пропускать ветра. Рекомендуется не оставлять открытых участков кожи. Рекомендуется носить шапку, варежки или перчатки, шарф, маску и закрытую, непромокаемую обувь. Надо оставаться сухим и на морозе двигаться.
43
44
Ветро-холодовый индекс от -48 до -54
45
Открытая кожа может замерзнуть в течении 2-5 минут. Очень высокий риск обморожения: требуется проверять лицо, открытые участки кожи и конечности на окоченение и побеление. Серьезный риск гипотермии в случае продолжительного нахождения на воздухе без соответствующей одежды или укрытия от холода и ветра.
46
Требуется осторожность при пребывании на улице. Рекомендуется одеваться в несколько слоев теплой одежды, внешний слой не должен пропускать ветра. Рекомендуется не оставлять открытых участков кожи. Рекомендуется носить шапку, варежки или перчатки, шарф, маску и закрытую, непромокаемую обувь.
47
Старайтесь отменить или сократить выходы на улицу. Оставайтесь сухим и двигайтесь.
48
49
Ветро-холодовый индекс от -55 и ниже
50
Чрезвычайно высокий риск: открытая кожа может замерзнуть менее чем за 2 минуты.
51
ОПАСНО! Опасные условия внешней среды. Оставайтесь в помещении.
52
 *
53
 */
54
55
56
class WindchillIndex
57
{
58
    const C1 = 13.12;
59
    const C2 = 0.6215;
60
    const C3 = 11.37;
61
    const C4 = 0.16;
62
    const C5 = 0.3965;
63
64
    protected $temp = null;
65
    protected $windSpeed = null;
66
67
    /**
68
     * @return float
69
     */
70 2
    public function getTemp(): float
71
    {
72 2
        return $this->temp;
73
    }
74
75
    /**
76
     * @param float $temp
77
     */
78 2
    public function setTemp(float $temp): self
79
    {
80 2
        $this->temp = $temp;
81 2
        return $this;
82
    }
83
84
    /**
85
     * @return float
86
     */
87 2
    public function getWindSpeed(): float
88
    {
89 2
        return $this->windSpeed;
90
    }
91
92
    /**
93
     * @param float $windSpeed
94
     */
95 2
    public function setWindSpeed(float $windSpeed): self
96
    {
97 2
        $this->windSpeed = $windSpeed;
98 2
        return $this;
99
    }
100
101
    /**
102
     * @return float
103
     */
104 1
    public function calc(): float
105
    {
106 1
        $Vkmph = $this->getWindSpeed() * 60.0 * 60.0 / 1000.0;
107 1
        $windSpeed = pow($Vkmph, self::C4);
108 1
        return self::C1 + self::C2 * $this->getTemp() - self::C3 * $windSpeed + self::C5 * $this->getTemp() * $windSpeed;
109
    }
110
}
111