DISCLAIMER
Este proyecto es algo básico y de ejemplo, muchos quizás les inspire, otros, no les agradará mucho por la simple razón de que, el calcular los macros a veces, es simple eso, puro calculo y la realidad que afronta un atleta esta más allá, por ejemplo estrés, muchísima masa muscular, capacidad de absorción de nutrientes, que no le guste comer, poco apetito muchas variables. Es de conocimiento que atletas de alto nivel no usan nada de fórmulas sino que hacen dieta por medio de la experiencia adquirida durante años y años de entrenamiento puro, duro y acérrimo, más observación del propio cuerpo, mirando como reacciona, y de ahí, suman o restan comida.`
J4NBasicCalc🏋🏼♂️
Es una aplicación básica para calcular la tasa metabólica basal usando fórmulas de Mifflin/St Jeor y Katch McArdle, mas dietas aleatorias configurables (añadir, quitar alimentos, dividir alimentos para recalcular calorías diarias) en las 3 etapas, definición, mantenimiento, volumen. próximamente generación de reportes en pdf.
Cuenta con un módulo para cálculo aproximado de la grasa corporal (bodyfat).
Las fórmulas de nutrición todas calculan el TMB/BMR
por sus siglas:
- Tasa Metabólica Basal
- Basal Metabolic Rate
dependiento el nutricionista tendrán ecuaciones distintas, por ejemplo:
Nutricionistas | Fórmulas |
---|---|
Katch McArdle |
370 + (21.6 x Lean Body Mass (kg) ) |
Mifflins/St Jeor **Hombres** |
(10 * peso (kg)) + (6.25 * altura (cm)) - ( 5 * edad) + 5; |
Mifflins/St Jeor **Mujeres** |
(10 * peso (kg)) + (6.25 * altura (cm)) - ( 5 * edad) - 161; |
Luego eso se multiplica por el factor de actividad física que puede ser un rango de 1.2 a 1.9
Factor Actividad física | Rango |
---|---|
Sedentario |
1.2 |
Liguero |
1.375 |
Moderado |
1.55 |
Muy Activo |
1.725 |
Extremo |
1.9 |
Dando las calorías de MANTENIMIENTO en las siguientes dos imagenes se presentan los fórmularios correspondientes para dicho cálculo
Uso para el TMB tasa metabólica basal
- Vista de Mifflins / St Jeor
- Vista de Katch McArdle
Estos test son basados en las vistas anteriores
@Test
@DisplayName("Tasa metabolica basal mifflins para Hombres sistema ingles, pulgadas y libras")
void tasaMetabolicaBasalMifflinsHombreConSistemaIngles() {
final var tmbMifflins = J4NBasicCalcTypeSafe.tmbMifflinsBuilder()
.withAge(AGE)
.withWeight(WEIGHT_POUNDS / POUNDS) //libras a kilos
.withHeight(HEIGHT_INCHES * INCHES)//pulgadas a centimetros
.withGender(Genero.HOMBRE)
.withPhysicalActivityFactor(PhysicalActivityFactor.MODERADO)
.calculateTmbWithMifflin()
.basicMetabolicRateByPhysicalActivityFactor()
.log()
.make();
assertThat(tmbMifflins.getBasicMetabolicRate()).isEqualTo(BASIC_METABOLIC_RATE_MALE_MIFFLINS);
assertThat(tmbMifflins.getMaintenancekiloCals()).isEqualTo(MAINTENANCE_KILOCALS_MALE_MIFFLINS);
}
Para Katch-McArdle necesitamos el bodyfat aproximado, como aquí Vista Body-Fat aproximado
@Test
@DisplayName("Tasa metabolica basal katchMcArdle con porcentaje graso de hombres sistema ingles")
void tasaMetabolicaBasalKatchMcArdleParaHombresSistemaIngles() {
final var bodyFatTypeSafe = J4NBasicCalcTypeSafe.bodyFatBuilder()
.withWeight(WEIGHT_POUNDS / POUNDS) //libras a kilos
.withHeight(HEIGHT_INCHES * INCHES)//pulgadas a centimetros
.withGender(Genero.HOMBRE)
.neckDiameter(NECK_DIAMETER)
.waistDiameter(WAIST_DIAMETER)
.withOutHip()
.calculateBodyFatWithFatMassAndLeanBodyMass()
.make();
final var tmbMifflins = J4NBasicCalcTypeSafe.tmbKatchMcArdleBuilder()
.withWeight(WEIGHT)
.withBodyFat(bodyFatTypeSafe.getBodyFat())
.withPhysicalActivityFactor(PhysicalActivityFactor.MODERADO)
.calculateTmbKatchMcArdle()
.tmbByPhysicalActivityFactor()
.log()
.make();
assertThat(tmbMifflins.getBasicMetabolicRate()).isEqualTo(BASIC_METABOLIC_RATE_MALE_KATCHMACARDLE);
assertThat(tmbMifflins.getMaintenancekiloCals()).isEqualTo(MAINTENANCE_KILOCALS_MALE_KATCHMACARDLE);
}
Uso para cálculo de MacroNutrientes
Con el cálculo previamente realizado obtendremos las calorías de mantenimiento gracias a multiplicar la tasa metabólica basal por el factor de actividad física, muy necesario para los pasos siguientes:
Mifflins
@Test
@DisplayName("Calcular macros en hombres en las 3 etapas con Mifflins")
void calculateMacrosMifflins() {
final var tmbMifflins = J4NBasicCalcTypeSafe.tmbMifflinsBuilder()
.withAge(AGE)
.withWeight(WEIGHT)
.withHeight(HEIGHT)
.withGender(Genero.HOMBRE)
.withPhysicalActivityFactor(PhysicalActivityFactor.MODERADO)
.calculateTmbWithMifflin()
.basicMetabolicRateByPhysicalActivityFactor()
.log()
.make();
final var mapMacros = J4NBasicCalcTypeSafe.calculateMacrosBuilder()
.withMaintenanceKiloCalories(tmbMifflins.getMaintenancekiloCals())
.withProteinPercentage(PROTEINS_PERCENTAGE_HIGH_CARBS)
.withCarbohydratesPercentage(CARBS_PERCENTAGE_HIGH_CARBS)
.withFatPercentage(FAT_PERCENTAGE_HIGH_CARBS)
.amountToSubtract(AMOUNT_TO_SUBTRACT)
.amountToAdd(AMOUNT_TO_ADD)
.timesToEat(TIMES_TO_EAT)
.calculateMacros()
.log()
.make()
.getMacros();
//Definicion
final double proteinasEnDefinicion = mapMacros.get(PROTEINA_DEFINICION);
final double carbohidratosEnDefinicion = mapMacros.get(CARBOS_DEFINICION);
final double grasasEnDefinicion = mapMacros.get(GRASAS_DEFINICION);
final double kiloCaloriasEnDefinicion = mapMacros.get(KILOCALS_DEFINICION);
assertThat(proteinasEnDefinicion).isEqualTo(PROTENS_STAGE_DEFINITION_MIFFLINS);
assertThat(carbohidratosEnDefinicion).isEqualTo((CARBS_STAGE_DEFINITION_MIFFLINS));
assertThat(grasasEnDefinicion).isEqualTo((FAT_STAGE_DEFINITION_MIFFLINS));
assertThat(kiloCaloriasEnDefinicion).isEqualTo((KILO_CALS_STAGE_DEFINITION_MIFFLINS));
//Mantenimiento
final double proteinasMantenimiento = mapMacros.get(PROTEINA_MANTENIMIENTO);
final double carbohidratosMantenimiento = mapMacros.get(CARBOS_MANTENIMIENTO);
final double grasasMantenimiento = mapMacros.get(GRASAS_MANTENIMIENTO);
final double kiloCaloriasEnMantenimiento = mapMacros.get(KILOCALS_MANTENIMIENTO);
assertThat(proteinasMantenimiento).isEqualTo((PROTENS_STAGE_MAINTENANCE_MIFFLINS));
assertThat(carbohidratosMantenimiento).isEqualTo((CARBS_STAGE_MAINTENANCE_MIFFLINS));
assertThat(grasasMantenimiento).isEqualTo((FAT_STAGE_MAINTENANCE_MIFFLINS));
assertThat(kiloCaloriasEnMantenimiento).isEqualTo((KILO_CALS_STAGE_MAINTENANCE_MIFFLINS));
//Volumen
final double proteinasEnVolumen = mapMacros.get(PROTEINA_VOLUMEN);
final double carbohidratosEnVolumen = mapMacros.get(CARBOS_VOLUMEN);
final double grasasEnVolumen = mapMacros.get(GRASAS_VOLUMEN);
final double kiloCaloriasEnVolumen = mapMacros.get(KILOCALS_VOLUMEN);
assertThat(proteinasEnVolumen).isEqualTo(PROTENS_STAGE_VOLUMEN_MIFFLINS);
assertThat(carbohidratosEnVolumen).isEqualTo(CARBS_STAGE_VOLUMEN_MIFFLINS);
assertThat(grasasEnVolumen).isEqualTo((FAT_STAGE_VOLUMEN_MIFFLINS));
assertThat(kiloCaloriasEnVolumen).isEqualTo((KILO_CALS_STAGE_VOLUMEN_MIFFLINS));
}
Katch McArdle
@Test
@DisplayName("Calcular macros en hombres en las 3 etapas con KatchMcArdle")
void calculateMacrosKatchMcArdleHombre() {
final var bodyFatTypeSafe = J4NBasicCalcTypeSafe.bodyFatBuilder()
.withWeight(WEIGHT)
.withHeight(HEIGHT)
.withGender(Genero.HOMBRE)
.neckDiameter(NECK_DIAMETER)
.waistDiameter(WAIST_DIAMETER)
.withOutHip()
.calculateBodyFatWithFatMassAndLeanBodyMass()
.make();
final var tmbMifflins = J4NBasicCalcTypeSafe.tmbKatchMcArdleBuilder()
.withWeight(WEIGHT)
.withBodyFat(bodyFatTypeSafe.getBodyFat())
.withPhysicalActivityFactor(PhysicalActivityFactor.MODERADO)
.calculateTmbKatchMcArdle()
.tmbByPhysicalActivityFactor()
.log()
.make();
final var mapMacros = J4NBasicCalcTypeSafe.calculateMacrosBuilder()
.withMaintenanceKiloCalories(tmbMifflins.getMaintenancekiloCals())
.withProteinPercentage(PROTEINS_PERCENTAGE_HIGH_CARBS)
.withCarbohydratesPercentage(CARBS_PERCENTAGE_HIGH_CARBS)
.withFatPercentage(FAT_PERCENTAGE_HIGH_CARBS)
.amountToSubtract(AMOUNT_TO_SUBTRACT)
.amountToAdd(AMOUNT_TO_ADD)
.timesToEat(TIMES_TO_EAT)
.calculateMacros()
.log()
.make()
.getMacros();
//Definicion
final double proteinasEnDefinicion = mapMacros.get(PROTEINA_DEFINICION);
final double carbohidratosEnDefinicion = mapMacros.get(CARBOS_DEFINICION);
final double grasasEnDefinicion = mapMacros.get(GRASAS_DEFINICION);
final double kiloCaloriasEnDefinicion = mapMacros.get(KILOCALS_DEFINICION);
assertThat(proteinasEnDefinicion).isEqualTo((PROTENS_STAGE_DEFINITION_KATCH_MCARDLE));
assertThat(carbohidratosEnDefinicion).isEqualTo((CARBS_STAGE_DEFINITION_KATCH_MCARDLE));
assertThat(grasasEnDefinicion).isEqualTo((FAT_STAGE_DEFINITION_KATCH_MCARDLE));
assertThat(kiloCaloriasEnDefinicion).isEqualTo((KILO_CALS_STAGE_DEFINITION_KATCH_MCARDLE));
//Mantenimiento
final double proteinasMantenimiento = mapMacros.get(PROTEINA_MANTENIMIENTO);
final double carbohidratosMantenimiento = mapMacros.get(CARBOS_MANTENIMIENTO);
final double grasasMantenimiento = mapMacros.get(GRASAS_MANTENIMIENTO);
final double kiloCaloriasEnMantenimiento = mapMacros.get(KILOCALS_MANTENIMIENTO);
assertThat(proteinasMantenimiento).isEqualTo((PROTENS_STAGE_MAINTENANCE_KATCH_MCARDLE));
assertThat(carbohidratosMantenimiento).isEqualTo((CARBS_STAGE_MAINTENANCE_KATCH_MCARDLE));
assertThat(grasasMantenimiento).isEqualTo((FAT_STAGE_MAINTENANCE_KATCH_MCARDLE));
assertThat(kiloCaloriasEnMantenimiento).isEqualTo((KILO_CALS_STAGE_MAINTENANCE_KATCH_MCARDLE));
//Volumen
final double proteinasEnVolumen = mapMacros.get(PROTEINA_VOLUMEN);
final double carbohidratosEnVolumen = mapMacros.get(CARBOS_VOLUMEN);
final double grasasEnVolumen = mapMacros.get(GRASAS_VOLUMEN);
final double kiloCaloriasEnVolumen = mapMacros.get(KILOCALS_VOLUMEN);
assertThat(proteinasEnVolumen).isEqualTo((PROTENS_STAGE_VOLUMEN_KATCH_MCARDLE));
assertThat(carbohidratosEnVolumen).isEqualTo((CARBS_STAGE_VOLUMEN_KATCH_MCARDLE));
assertThat(grasasEnVolumen).isEqualTo((FAT_STAGE_VOLUMEN_KATCH_MCARDLE));
assertThat(kiloCaloriasEnVolumen).isEqualTo((KILO_CALS_STAGE_VOLUMEN_KATCH_MCARDLE));
assertThat(kiloCaloriasEnVolumen).isEqualTo(KILO_CALS_STAGE_VOLUMEN_KATCH_MCARDLE);
}
Motivación de hacer todo esto?
En esta aplicación el atleta se ahorra ese cálculo tedioso de los macros y porcentajes correspondientes de una manera fácil , sencilla y visual con pocos clicks, basta con el cansancio que sufrimos, estrés muscular, mental, del sistema nervioso central, simpático y parasimpático, y pare de contar, lo que provoca que muchas veces no podamos ni siquiera sentarnos por distintos tipos de incomodidades, una de ellas es esa, el cansancio extremo.
Logrando aquí que se puedan sumar o restar calorías fácilmente, a esas calorías de mantenimiento
calculadas por ambos nutricionistas, en la siguiente pestaña/tab ⚙Configurar Macros, tiene el objetivo de establecer dichos valores
para hallar los Macro-Nutrientes
Aquí se deberá introducir los valores de porcentajes para cada macronutriente, en 2 etapas muy conocidas por ejemplo:
Low carbs
- 45% proteinas
- 30% carbohidratos
- 25% de grasas
High-carbs
- 30% proteinas
- 65% carbohidratos
- 5% grasas
también se deberá establecer el número de veces a comer, mínimo recomendado 3 por último sumar o restar calorías a etapas de definición o volumen.
Vista de ⚙ Configurar Macros
esta se basa en los calculos y test anteriores
Vista de dieta en general
La imagen anterior resume, que las etapas pasadas son obligatorias para esta, para obtener tablas con los 3 macronutrientes esenciales y aleatorios para un atleta, para una dieta mínima, etc, se pueden incluir también carbohidratos simples, legumbres, y verduras.
En versiones futuras se podra exportar a distintos formatos como .pdf, quiza exista la posibilidad de .xsls .docx etc.
colores basados en 🇻🇪
▪Vista Body-Fat aproximado
Este módulo es usado para el cálculo de 3 cosas que son:
- Grasa corporal (Body-Fat)
- Masa limpia (Lbm)
- Masa grasa (Fat-Mass)
Aquí se usa la fórmula de los Navy Seal para obtener un %graso aproximado sin plicómetro, y algunas otras tecnicas mas complejas y costosas.
Genero | Fórmula |
---|---|
Hombre |
495 / (1.0324 - .19077 * log10(CINTURA (cm) - CUELLO (cm)) + .15456 * log10(ALTURA (cm))) - 450 |
Mujer |
495 / (1.29579 - .35004 * log10((CINTURA (cm) + CADERA (cm)) - CUELLO (cm)) + .22100 * log10(ALTURA (cm))) - 450 |
Fórmulas para la Masa grasa y Masa limpia (Lbm), gracias al bodyfat obtenido previamente.
Tipo | Fórmula |
---|---|
Masa Grasa (FatMass) |
(Body-Fat/100) * peso(kg) |
Masa Limpia (Lbm) |
peso(kg) - (FatMass) |
Código java para hallar el bodyFat en hombres con sistema métrico
@Test
@DisplayName("BodyFat-MasaLimpia-MasaGrasa para hombres sistema metrico")
void bodyFatHombres() {
var bodyFatTypeSafe = J4NBasicCalcTypeSafe.bodyFatBuilder()
.withWeight(WEIGHT)
.withHeight(HEIGHT)
.withGender(Genero.HOMBRE)
.neckDiameter(NECK_DIAMETER)
.waistDiameter(WAIST_DIAMETER)
.withOutHip()
.calculateBodyFatWithFatMassAndLeanBodyMass()
.log()
.make();
assertThat(bodyFatTypeSafe.getBodyFat()).isEqualTo(BODY_FAT_MALE);
assertThat(bodyFatTypeSafe.getFatMass()).isEqualTo(FAT_MASS_MALE);
assertThat(bodyFatTypeSafe.getLeanBodyMass()).isEqualTo(LEAN_BODY_MASS_MALE);
}
Para hallar el bodyFat en mujeres invocar a .withHipDiameter(HIP_DIAMETER)
@Test
@DisplayName("BodyFat-MasaLimpia-MasaGrasa para mujeres sistema metrico")
void bodyFatMujeresSistemaMetrico() {
var bodyFatTypeSafe = J4NBasicCalcTypeSafe.bodyFatBuilder()
.withWeight(WEIGHT)
.withHeight(HEIGHT)
.withGender(Genero.MUJER)
.neckDiameter(NECK_DIAMETER)
.waistDiameter(WAIST_DIAMETER)
.withHipDiameter(HIP_DIAMETER)
.calculateBodyFatWithFatMassAndLeanBodyMass()
.log()
.make();
assertThat(bodyFatTypeSafe.getBodyFat()).isEqualTo(BODY_FAT_FEMALE);
assertThat(bodyFatTypeSafe.getFatMass()).isEqualTo(FAT_MASS_FEMALE);
assertThat(bodyFatTypeSafe.getLeanBodyMass()).isEqualTo(LEAN_BODY_MASS_FEMALE);
}
Y de Vzla pal mundo 💛💙❤️
Comments