private AgeGenderClassification SelectCategory(Gender gender, float age) { AgeGenderClassification selectedCategory = new AgeGenderClassification(); foreach (var category in PersonCategories) { if (age >= category.AgeMin && age < category.AgeMax && gender == category.Gender) { selectedCategory = category; break; } } return(selectedCategory); }
private Distribution GetAnalizeDistribution(Dictionary <BodyType, BodyTypeAttributes> result, AgeGenderClassification selectedCategory) { var distribution = GetDistribution(result); distribution.DistributionName = AnalizeDistributionName; for (int i = 0; i < BODY_TYPES_CNT; i++) { var prevValue = i == 0 ? 0 : distribution.Measurements[i - 1].Quantity; var diff = selectedCategory.FatIntervals[i + 1] - selectedCategory.FatIntervals[i]; distribution.Measurements[i].Quantity = diff + prevValue; } return(distribution); }
private BodyType CalcBodyType(AgeGenderClassification selectedCategory, float fatPercent) { var bodyTypeZone = BodyType.thin; for (int i = BODY_TYPES_CNT - 1; i >= 0; i--) { var enm = (BodyType)i; if (fatPercent > selectedCategory.FatIntervals[i]) { bodyTypeZone = enm; break; } } return(bodyTypeZone); }
public InterpolationResults(float height, float initWeight, float dream_weight, float age, string gender, string activity, float waist, float hips, float neck, bool hardMode) { // Отображение введенных показателей InputHeight = height.ToString(); InputWeight = initWeight.ToString(); InputAge = age.ToString(); InputGender = gender.ToString(); InputActivity = activity.ToString(); InputDreamWeight = dream_weight == 0 ? "" : dream_weight.ToString(); // Пол Gender genderValue = GenderDict[gender]; // Отнесение человека к одной из 6 категорий по половозрастноым признакам AgeGenderClassification selectedCategory = SelectCategory(genderValue, age); // Расчет распределения зон телосложения, результирущих показателей % жировой ткани, веса и кол-ва недель var results = CalcSchedule(height, initWeight, dream_weight, age, genderValue, activity, waist, hips, neck, hardMode); // График распределения зон телосложений ScheduleValues = results.Item1; // Получаем словарь со списками распределения графика похудения по типам телосложения _bodyTypeZonesDict = GetBodyZonesDictionary(height, initWeight, dream_weight, waist, hips, neck, genderValue, selectedCategory, hardMode); // Масса на границе начала зоны истощения LimitWeight = GetLimitWeight(_bodyTypeZonesDict[BodyType.thin]); // Критическая масса тела (несовместимая с жизнью) CriticalWeight = GetCriticalWeight(genderValue, results.Item2, results.Item3); // Кол-во недель в плане WeeksCount = results.Item4.ToString(); // Рекомендации Recomendations = GetWarning(LimitWeight, CriticalWeight); // Распределение веса в зависимости от недель (для каждой зоны телосложения отдельная зависимость) Distribution = GetInterpltnDistribution(ResultDict, _bodyTypeZonesDict); // Фокус на график Anchor = "charts"; }
public AnalizeResults(string gender, float age, float waist, float hips, float neck, float height, float weight, bool hardMode) { // Отображение введенных показателей InputGender = gender; InputAge = age.ToString(); InputWaist = waist == 0 ? "" : waist.ToString(); InputHips = hips == 0 ? "" : hips.ToString(); InputNeck = neck == 0 ? "" : neck.ToString(); InputHeight = height.ToString(); InputWeight = weight.ToString(); Gender genderValue = GenderDict[gender]; // Расчет % жировой ткани в организме float fatPercent = CalcFatPercent(genderValue, waist, hips, neck, height, weight, hardMode); // Не завышен ли уровень висцеральной жировой ткани ViscellarFatConclusion = CalcVisceralFat(genderValue, waist, hips, hardMode); // Отнесение человека к одной из 6 категорий по половозрастноым признакам AgeGenderClassification selectedCategory = SelectCategory(genderValue, age); // Вычисление типа телосложения человека BodyType bodyTypeZone = CalcBodyType(selectedCategory, fatPercent); // Результат: тип телосложения и % жировой ткани + Рекомендация Recomendations = $"У вас наблюдается {ResultDict[bodyTypeZone].Name.ToLower()}," + $" жировая ткань в организме составляет {Math.Round(fatPercent, 2)} % " + ResultDict[bodyTypeZone].Recomendations; // Свойство видимости ссылки на страницу с составлением плана снижения веса LinkVisibility = GetVisibility(bodyTypeZone); // Свойство видимости графика ChartVisibility = "visible"; // Распределение по типам телосложения в зав-сти от % жировой ткани в организме для выбранной половозрастной категории Distribution = GetAnalizeDistribution(ResultDict, selectedCategory); // Фокус на график Anchor = "charts"; }
private Dictionary <BodyType, List <WeightToTime> > GetBodyZonesDictionary(float height, float initWeight, float dream_weight, float waist, float hips, float neck, Gender gender, AgeGenderClassification selectedCategory, bool hardMode) { var dictionary = new Dictionary <BodyType, List <WeightToTime> >() { { BodyType.thin, BodyTypeZones.UnderfatZone = new List <WeightToTime>() }, { BodyType.athletic, BodyTypeZones.AthleticZone = new List <WeightToTime>() }, { BodyType.good, BodyTypeZones.FitZone = new List <WeightToTime>() }, { BodyType.average, BodyTypeZones.HealthyZone = new List <WeightToTime>() }, { BodyType.excess, BodyTypeZones.OverfatZone = new List <WeightToTime>() }, { BodyType.extra, BodyTypeZones.ObeseZone = new List <WeightToTime>() }, }; float weight = 0; float fatPercent = 0; float fatPercentDifference = 0; int week = 0; do { // Вес и %жировой ткани if (week == 0) { // Начальный вес weight = initWeight; // Расчет % жировой ткани var res = CalcFatPercent(height, weight, gender, waist, hips, neck, hardMode); fatPercent = res.Item1; fatPercentDifference = res.Item2; } else { // Пересчет веса weight = (1 - KbguCalculation.GetWeightRecession(fatPercent, gender)) * weight; // Персчет % жировой ткани fatPercent = KbguCalculation.FatPercent(height, weight, gender) + fatPercentDifference; } // Инициализация элементов списков словаря нулевыми значениями for (int i = 0; i < BODY_TYPES_CNT; i++) { var enm = (BodyType)i; dictionary[enm].Add(new WeightToTime { PeriodId = week, Weight = 0 }); } // Заполнение элементов списков словаря значениями если вес находится в рассматриваемой зоне for (int i = BODY_TYPES_CNT - 1; i >= 0; i--) { var enm = (BodyType)i; if (fatPercent > selectedCategory.FatIntervals[i]) { dictionary[enm][week].Weight = (float)Math.Round(weight, 2); break; } } week++; }while (!IsCriticalFatValue(gender, fatPercent) && weight > dream_weight); return(dictionary); }