Я создаю калькулятор ИМТ, и я пытаюсь создать датчик, который бы отражал ИМТ. Я использую датчик, использующий 'response-gauge-chart', и он отображается следующим образом
<GaugeChart
id="gauge-chart"
percent={gageCalc()}
nrOfLevels={3}
colors={["#FFFF00", "#228B22", "#FF0000"]}
/>
Это gageCalc()
и словарь, который я использовал:
const gageCalc = () => {
try {
var c = [Math.round(calcBMI())];
var x = dict[Math.round(calcBMI())];
if (c < 16) return 0.0;
if (c > 30) return 1;
return x;
} catch (e) {
// does nothing right now
}
};
var dict = {
16: 0.0,
17: 0.16,
18: 0.33,
19: 0.4,
20: 0.4,
21: 0.5,
22: 0.5,
23: 0.5,
24: 0.66,
25: 0.66,
26: 0.7,
27: 0.825,
28: 0.825,
29: 0.9,
30: 1,
};
Словарь вроде работает, но не самый точный. Я просто распределил проценты как можно лучше. calcBMI()
просто возвращает ИМТ человека. Итак, моя проблема в том, что стрелка датчика установлена с использованием процента, основанного на значении, возвращаемом из gageCalc()
. Помимо словаря, я не знаю, как сделать стрелку на шкале ИМТ точной.
Например, если у кого-то ИМТ 22, то у него нормальный ИМТ, и стрелка будет в зеленая область шкалы, но если у них ИМТ 28, то мне нужно, чтобы стрелка попала в красную зону. Так выглядит датчик: Мой датчик ИМТ
Это таблица, которой я следую:
Underweight (yellow) = Below 18.5
Healthy Weight (green) = 18.5 to 24.9
Overweight (red) = 30 or greater
Есть ли формула, которая могла бы сделать это для меня? Есть ли лучший измеритель, который я могу использовать, или мой словарь - лучший способ сделать это. Спасибо!