42 lines
1.8 KiB
MonkeyC
42 lines
1.8 KiB
MonkeyC
// Зоны пульса: 50/70/85 % от макс. ЧСС (Ф-2.2).
|
||
// Макс. ЧСС хранится в масштабе ×10 (maxBpm10) — весь расчёт целочисленный,
|
||
// без Float; формула Танаки 208 − 0,7×возраст тоже считается в ×10.
|
||
class ZoneCalc {
|
||
// Идентификаторы зон (цвет на экране дублируется подписью)
|
||
var ZONE_NONE = 0; // нет данных — прочерк
|
||
var ZONE_BLUE = 1; // < 50 % — восстановление
|
||
var ZONE_GREEN = 2; // 50–70 % — лёгкая
|
||
var ZONE_YELLOW = 3; // 70–85 % — средняя
|
||
var ZONE_RED = 4; // ≥ 85 % — высокая
|
||
|
||
// Макс. ЧСС ×10: ручное значение (>0) приоритетно, иначе Танака от возраста.
|
||
// Возраст вне 14–100 — умолчание 45.
|
||
function maxBpm10For(hrMaxBpm, age) {
|
||
if (hrMaxBpm != null && hrMaxBpm > 0) {
|
||
return hrMaxBpm * 10;
|
||
}
|
||
if (age == null || age < 14 || age > 100) {
|
||
age = 45;
|
||
}
|
||
return 2080 - 7 * age;
|
||
}
|
||
|
||
// Зона по пульсу. Пороги в целых числах (масштаб ×10):
|
||
// 50 % → bpm×20 < maxBpm10; 70 % → bpm×100 < maxBpm10×7; 85 % → bpm×200 < maxBpm10×17
|
||
function zoneFor(bpm, maxBpm10) {
|
||
if (bpm == null || bpm <= 0 || maxBpm10 == null || maxBpm10 <= 0) {
|
||
return ZONE_NONE;
|
||
}
|
||
if (bpm * 20 < maxBpm10) {
|
||
return ZONE_BLUE;
|
||
}
|
||
if (bpm * 100 < maxBpm10 * 7) {
|
||
return ZONE_GREEN;
|
||
}
|
||
if (bpm * 200 < maxBpm10 * 17) {
|
||
return ZONE_YELLOW;
|
||
}
|
||
return ZONE_RED;
|
||
}
|
||
}
|