Calculo De Macros

Calculadora de Macros: Calcula tus Macronutrientes Diarios :root { –primary-color: #004a99; –success-color: #28a745; –background-color: #f8f9fa; –text-color: #333; –border-color: #ddd; –card-background: #fff; –error-color: #dc3545; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(–background-color); color: var(–text-color); line-height: 1.6; margin: 0; padding: 0; display: flex; flex-direction: column; align-items: center; padding-top: 20px; padding-bottom: 40px; } .container { width: 100%; max-width: 960px; background-color: var(–card-background); padding: 30px; border-radius: 8px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); margin: 0 auto; display: flex; flex-direction: column; align-items: center; } h1, h2, h3 { color: var(–primary-color); text-align: center; margin-bottom: 20px; } h1 { font-size: 2.5em; margin-bottom: 30px; } h2 { font-size: 1.8em; border-bottom: 2px solid var(–primary-color); padding-bottom: 10px; margin-top: 40px; } h3 { font-size: 1.4em; margin-top: 30px; } .loan-calc-container { width: 100%; max-width: 600px; margin-top: 20px; padding: 25px; border: 1px solid var(–border-color); border-radius: 8px; background-color: var(–card-background); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); } .input-group { margin-bottom: 20px; width: 100%; } .input-group label { display: block; margin-bottom: 8px; font-weight: bold; color: var(–primary-color); } .input-group input[type="number"], .input-group select { width: calc(100% – 22px); padding: 12px 10px; border: 1px solid var(–border-color); border-radius: 4px; font-size: 1em; box-sizing: border-box; transition: border-color 0.3s ease; } .input-group input[type="number"]:focus, .input-group select:focus { border-color: var(–primary-color); outline: none; } .input-group .helper-text { font-size: 0.85em; color: #6c757d; margin-top: 5px; display: block; } .input-group .error-message { color: var(–error-color); font-size: 0.8em; margin-top: 5px; display: none; /* Hidden by default */ height: 1.2em; /* Reserve space */ } .input-group .error-message.visible { display: block; } .button-group { display: flex; justify-content: space-between; margin-top: 30px; gap: 10px; } button { padding: 12px 25px; border: none; border-radius: 5px; font-size: 1em; font-weight: bold; cursor: pointer; transition: background-color 0.3s ease, transform 0.2s ease; flex-grow: 1; } button.primary { background-color: var(–primary-color); color: white; } button.primary:hover { background-color: #003366; transform: translateY(-2px); } button.secondary { background-color: #6c757d; color: white; } button.secondary:hover { background-color: #5a6268; transform: translateY(-2px); } button.reset { background-color: #ffc107; color: #212529; } button.reset:hover { background-color: #e0a800; transform: translateY(-2px); } #results { margin-top: 30px; padding: 25px; border: 1px solid var(–border-color); border-radius: 8px; background-color: var(–card-background); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); width: 100%; max-width: 600px; text-align: center; } #results h3 { margin-top: 0; color: var(–primary-color); } .result-item { margin-bottom: 15px; padding: 10px; border-radius: 5px; } .result-item label { font-weight: bold; color: var(–primary-color); display: block; margin-bottom: 5px; } .result-item .value { font-size: 1.5em; font-weight: bold; color: var(–primary-color); } .result-item.primary-result { background-color: var(–success-color); color: white; padding: 20px; margin-bottom: 20px; } .result-item.primary-result .value { font-size: 2.2em; color: white; } .result-item.primary-result label { color: white; } .formula-explanation { font-size: 0.9em; color: #6c757d; margin-top: 15px; text-align: left; border-top: 1px dashed var(–border-color); padding-top: 10px; } table { width: 100%; border-collapse: collapse; margin-top: 20px; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); } caption { font-size: 1.1em; font-weight: bold; color: var(–primary-color); margin-bottom: 10px; text-align: left; } th, td { padding: 12px 15px; text-align: left; border: 1px solid var(–border-color); } thead { background-color: var(–primary-color); color: white; } tbody tr:nth-child(even) { background-color: #f2f2f2; } canvas { margin-top: 20px; border: 1px solid var(–border-color); border-radius: 4px; background-color: var(–card-background); } .article-section { margin-top: 40px; padding: 30px; background-color: var(–card-background); border-radius: 8px; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); width: 100%; max-width: 960px; text-align: left; } .article-section p, .article-section ul, .article-section ol { margin-bottom: 15px; } .article-section ul, .article-section ol { padding-left: 25px; } .article-section li { margin-bottom: 8px; } .article-section a { color: var(–primary-color); text-decoration: none; font-weight: bold; } .article-section a:hover { text-decoration: underline; } .faq-item { margin-bottom: 15px; padding: 15px; border: 1px solid var(–border-color); border-radius: 5px; background-color: #fdfdfd; } .faq-item strong { color: var(–primary-color); display: block; margin-bottom: 5px; } .related-links ul { list-style: none; padding: 0; } .related-links li { margin-bottom: 10px; } .related-links a { font-weight: bold; } .related-links span { font-size: 0.9em; color: #6c757d; margin-left: 10px; } .highlight { background-color: var(–success-color); color: white; padding: 2px 5px; border-radius: 3px; font-weight: bold; } .primary-result .highlight { background-color: white; color: var(–success-color); } .copy-button { background-color: #17a2b8; color: white; margin-top: 15px; } .copy-button:hover { background-color: #138496; transform: translateY(-2px); } .tooltip { position: relative; display: inline-block; border-bottom: 1px dotted var(–primary-color); cursor: help; } .tooltip .tooltiptext { visibility: hidden; width: 220px; background-color: #555; color: #fff; text-align: center; border-radius: 6px; padding: 5px 10px; position: absolute; z-index: 1; bottom: 125%; left: 50%; margin-left: -110px; opacity: 0; transition: opacity 0.3s; font-size: 0.85em; line-height: 1.4; } .tooltip .tooltiptext::after { content: ""; position: absolute; top: 100%; left: 50%; margin-left: -5px; border-width: 5px; border-style: solid; border-color: #555 transparent transparent transparent; } .tooltip:hover .tooltiptext { visibility: visible; opacity: 1; }

Calculadora de Macros

Optimiza tu nutrición calculando tus macronutrientes diarios ideales.

Calcula tus Macros

Introduce tu peso actual en kilogramos.
Introduce tu altura en centímetros.
Introduce tu edad en años.
Masculino Femenino Selecciona tu género para un cálculo más preciso.
Sedentario (poco o ningún ejercicio) Ligero (ejercicio ligero 1-3 días/semana) Moderado (ejercicio moderado 3-5 días/semana) Alto (ejercicio intenso 6-7 días/semana) Muy Alto (ejercicio muy intenso, trabajo físico o entrenamiento) Elige el nivel que mejor describe tu rutina semanal.
Perder Peso Mantener Peso Ganar Músculo Selecciona tu meta principal para ajustar las calorías.

Tus Macronutrientes Diarios

Basado en la fórmula de Harris-Benedict (revisada) y tu objetivo.

Distribución de Macronutrientes

Gráfico de pastel mostrando la proporción de cada macronutriente en tus calorías diarias.
Resumen de Macronutrientes
Macronutriente Gramos Diarios Calorías Diarias Porcentaje del Total

Calculo de Macros

Bienvenido a nuestra guía completa sobre el calculo de macros. Entender y calcular tus macronutrientes diarios es fundamental para alcanzar tus objetivos de salud, rendimiento deportivo y composición corporal. En esta página, encontrarás una herramienta intuitiva para determinar tus macros ideales, junto con una explicación detallada y ejemplos prácticos.

¿Qué es el Calculo de Macros?

El calculo de macros se refiere al proceso de determinar la cantidad adecuada de los tres macronutrientes principales – proteínas, carbohidratos y grasas – que una persona debe consumir diariamente para alcanzar sus objetivos de salud y fitness. Los macronutrientes son los componentes de los alimentos que proporcionan energía (calorías) y son esenciales para el crecimiento, el metabolismo y otras funciones corporales.

¿Quién debería usarlo? Cualquier persona interesada en optimizar su nutrición, ya sea para perder grasa, ganar masa muscular, mejorar el rendimiento deportivo, o simplemente mantener un estilo de vida saludable. Desde atletas de élite hasta personas que buscan mejorar su bienestar general, el calculo de macros ofrece un enfoque personalizado y basado en datos.

Mitos comunes sobre el calculo de macros:

  • "Solo es para culturistas": Falso. El calculo de macros es beneficioso para cualquier persona que busque controlar su ingesta calórica y nutricional.
  • "Es demasiado complicado": Con las herramientas adecuadas, como nuestra calculadora, el proceso es sencillo y accesible.
  • "Debes comer exactamente esos gramos todos los días": Si bien es una guía, hay un rango de flexibilidad. La consistencia a largo plazo es más importante que la precisión milimétrica diaria.
  • "Todos los carbohidratos son malos": Los carbohidratos son una fuente de energía crucial. La clave está en la cantidad y la calidad.

Fórmula y Explicación Matemática del Calculo de Macros

El proceso de calculo de macros generalmente comienza con la estimación de las necesidades calóricas diarias totales (TDEE – Total Daily Energy Expenditure). Una vez que se tiene el TDEE, se ajusta según el objetivo (perder peso, mantener o ganar músculo) y luego se distribuyen esas calorías entre los tres macronutrientes.

Paso 1: Calcular la Tasa Metabólica Basal (TMB)

Utilizamos una versión revisada de la fórmula de Harris-Benedict, que es ampliamente aceptada:

Para Hombres: TMB = (10 * peso en kg) + (6.25 * altura en cm) – (5 * edad en años) + 5

Para Mujeres: TMB = (10 * peso en kg) + (6.25 * altura en cm) – (5 * edad en años) – 161

Paso 2: Calcular el Gasto Energético Diario Total (TDEE)

Multiplicamos la TMB por el factor de nivel de actividad física:

TDEE = TMB * Factor de Actividad

Paso 3: Ajustar las Calorías Según el Objetivo

  • Perder Peso: Restar 300-500 calorías del TDEE.
  • Mantener Peso: Usar el TDEE calculado.
  • Ganar Músculo: Sumar 250-500 calorías al TDEE.

Llamaremos a este valor "Calorías Objetivo".

Paso 4: Distribuir los Macronutrientes

La distribución varía según el objetivo, pero aquí hay pautas generales:

  • Proteínas: Esenciales para la reparación y crecimiento muscular. Un buen punto de partida es 1.6-2.2 gramos por kg de peso corporal.
  • Grasas: Importantes para la función hormonal y la salud celular. Generalmente se establecen entre el 20-30% de las calorías totales.
  • Carbohidratos: Principal fuente de energía. Se calculan como las calorías restantes después de asignar proteínas y grasas.

Fórmulas de Conversión:

  • 1 gramo de Proteína = 4 calorías
  • 1 gramo de Carbohidrato = 4 calorías
  • 1 gramo de Grasa = 9 calorías

Tabla de Variables del Calculo de Macros

Variables Clave en el Calculo de Macros
Variable Significado Unidad Rango Típico
Peso Corporal Masa total del individuo. kg 30 – 150+ kg
Altura Estatura del individuo. cm 140 – 200+ cm
Edad Años vividos por el individuo. Años 18 – 80+ años
Género Define diferencias metabólicas base. Categoría Masculino / Femenino
Nivel de Actividad Frecuencia e intensidad del ejercicio. Factor (decimal) 1.2 – 1.9
Objetivo Meta principal de la dieta. Categoría Perder Peso, Mantener, Ganar Músculo
TMB Calorías mínimas para funciones vitales en reposo. kcal/día 1200 – 2500+ kcal/día
TDEE Gasto calórico diario total estimado. kcal/día 1800 – 3500+ kcal/día
Calorías Objetivo Calorías diarias a consumir según meta. kcal/día 1500 – 3000+ kcal/día
Proteínas Macronutriente para construcción y reparación. g / kcal 1.6-2.2 g/kg / 20-35%
Grasas Macronutriente para hormonas y salud celular. g / % 20-30%
Carbohidratos Macronutriente principal de energía. g / % Restante (aprox. 40-60%)

Ejemplos Prácticos de Calculo de Macros

Veamos cómo funciona el calculo de macros con dos perfiles diferentes:

Ejemplo 1: Mujer Buscando Perder Grasa

  • Perfil: Ana, 32 años, 165 cm, 75 kg.
  • Objetivo: Perder peso.
  • Nivel de Actividad: Moderado (ejercicio 4 veces/semana).

Cálculos Estimados:

  • TMB (Mujer): (10 * 75) + (6.25 * 165) – (5 * 32) – 161 = 750 + 1031.25 – 160 – 161 = 1460.25 kcal
  • TDEE: 1460.25 * 1.55 (Moderado) = 2263.39 kcal
  • Calorías Objetivo (Perder Peso, -400 kcal): 2263.39 – 400 = 1863.39 kcal (redondeado a 1860 kcal)

Distribución de Macros (Ajustada para Perder Peso):

  • Proteínas: 1.8 g/kg * 75 kg = 135 g (135g * 4 kcal/g = 540 kcal)
  • Grasas: 25% de 1860 kcal = 465 kcal (465 kcal / 9 kcal/g = 51.67 g, redondeado a 52 g)
  • Carbohidratos: Calorías restantes = 1860 – 540 (proteínas) – 465 (grasas) = 855 kcal (855 kcal / 4 kcal/g = 213.75 g, redondeado a 214 g)

Resultado para Ana: Aproximadamente 1860 kcal, 135g Proteínas, 214g Carbohidratos, 52g Grasas.

Ejemplo 2: Hombre Buscando Ganar Músculo

  • Perfil: Carlos, 25 años, 180 cm, 80 kg.
  • Objetivo: Ganar músculo.
  • Nivel de Actividad: Alto (entrenamiento intenso 6 días/semana).

Cálculos Estimados:

  • TMB (Hombre): (10 * 80) + (6.25 * 180) – (5 * 25) + 5 = 800 + 1125 – 125 + 5 = 1805 kcal
  • TDEE: 1805 * 1.725 (Alto) = 3113.63 kcal
  • Calorías Objetivo (Ganar Músculo, +300 kcal): 3113.63 + 300 = 3413.63 kcal (redondeado a 3415 kcal)

Distribución de Macros (Ajustada para Ganar Músculo):

  • Proteínas: 2.0 g/kg * 80 kg = 160 g (160g * 4 kcal/g = 640 kcal)
  • Grasas: 25% de 3415 kcal = 853.75 kcal (853.75 kcal / 9 kcal/g = 94.86 g, redondeado a 95 g)
  • Carbohidratos: Calorías restantes = 3415 – 640 (proteínas) – 855 (grasas) = 1920 kcal (1920 kcal / 4 kcal/g = 480 g)

Resultado para Carlos: Aproximadamente 3415 kcal, 160g Proteínas, 480g Carbohidratos, 95g Grasas.

Cómo Usar Esta Calculadora de Calculo de Macros

Nuestra calculadora de calculo de macros está diseñada para ser simple y efectiva. Sigue estos pasos:

  1. Introduce tus Datos Básicos: Ingresa tu peso, altura, edad y selecciona tu género.
  2. Selecciona tu Nivel de Actividad: Elige la opción que mejor describa tu rutina de ejercicio semanal. Sé honesto para obtener resultados precisos.
  3. Define tu Objetivo: Escoge si deseas perder peso, mantener tu peso actual o ganar masa muscular.
  4. Haz Clic en "Calcular Macros": La calculadora procesará tus datos y te mostrará tus necesidades calóricas y de macronutrientes diarias.

Cómo Leer los Resultados:

  • Calorías Diarias Estimadas: Es el total de energía que necesitas consumir al día para alcanzar tu objetivo.
  • Gramos de Proteínas, Carbohidratos y Grasas: Son las cantidades específicas de cada macronutriente que debes apuntar a consumir.
  • Porcentaje del Total: Muestra la contribución de cada macro a tus calorías totales.
  • Tabla y Gráfico: Ofrecen una visualización clara de la distribución de tus macros.

Guía para la Toma de Decisiones:

Utiliza estos números como una guía. Puedes ajustar ligeramente las cantidades (especialmente carbohidratos y grasas) según tu respuesta corporal y preferencias. Lo más importante es la consistencia y la calidad de los alimentos que eliges para cumplir con tus objetivos de calculo de macros.

Si buscas mejorar tu rendimiento deportivo, considera ajustar tus carbohidratos alrededor de tus entrenamientos.

Factores Clave que Afectan los Resultados del Calculo de Macros

Varios factores influyen en la precisión de tu calculo de macros y en cómo tu cuerpo responde a ellos:

  1. Metabolismo Individual: Cada persona tiene un metabolismo único. Algunas personas queman calorías más rápido que otras, incluso con niveles de actividad similares.
  2. Composición Corporal: El porcentaje de masa muscular versus grasa corporal afecta las necesidades calóricas. Más músculo generalmente significa un metabolismo más alto.
  3. Calidad de los Alimentos: No todas las calorías son iguales. Prioriza alimentos integrales y nutritivos para obtener vitaminas, minerales y fibra, lo que mejora la saciedad y la salud general.
  4. Hormonas y Salud General: Condiciones como el hipotiroidismo, el síndrome de ovario poliquístico (SOP) o el estrés crónico pueden alterar el metabolismo y las necesidades calóricas.
  5. Sueño y Recuperación: La falta de sueño puede afectar negativamente las hormonas del apetito (grelina y leptina) y aumentar los antojos, dificultando el seguimiento de los macros.
  6. Termogénesis Inducida por los Alimentos (TID): La digestión y absorción de alimentos consume energía. Las proteínas, por ejemplo, tienen una TID más alta que las grasas.
  7. Adaptaciones Metabólicas: Con el tiempo, el cuerpo puede adaptarse a dietas bajas en calorías, reduciendo el TDEE. Ajustes periódicos pueden ser necesarios.
  8. Hidratación: Beber suficiente agua es crucial para el metabolismo y puede influir en la sensación de saciedad.

Considera estos factores al interpretar tus resultados y realizar ajustes. Para una planificación nutricional detallada, consulta a un profesional.

Preguntas Frecuentes sobre el Calculo de Macros

¿Qué pasa si mis macros calculados son muy bajos en calorías?

Si el resultado es significativamente bajo (por ejemplo, menos de 1200 kcal para mujeres o 1500 kcal para hombres), es posible que debas reevaluar tu nivel de actividad o considerar un objetivo de mantenimiento o ganancia muscular en lugar de una pérdida de peso agresiva. Una restricción calórica extrema puede ser perjudicial.

¿Debo pesar todos mis alimentos?

Para mayor precisión, especialmente al principio o si tienes objetivos específicos, pesar los alimentos es lo más recomendable. Sin embargo, con la práctica, puedes aprender a estimar porciones de manera razonable. La consistencia es clave.

¿Puedo intercambiar gramos de un macro por otro?

Sí, hasta cierto punto. Por ejemplo, si no alcanzas tus gramos de carbohidratos pero superas tus grasas, puedes ajustar. Sin embargo, es importante mantener las proteínas altas si tu objetivo es ganar músculo o preservar masa. Las proporciones generales (porcentajes) también son importantes.

¿Qué son los "macros limpios" vs "macros sucios"?

Se refiere a la calidad de los alimentos. Los "macros limpios" provienen de fuentes nutritivas y enteras (pollo, pescado, verduras, frutas, granos integrales). Los "macros sucios" provienen de alimentos procesados o con bajo valor nutricional (comida rápida, dulces). Idealmente, la mayoría de tus macros deberían ser "limpios".

¿Cómo afecta el ejercicio de fuerza al calculo de macros?

El entrenamiento de fuerza aumenta la necesidad de proteínas para la reparación y el crecimiento muscular. También puede aumentar tu TDEE general, lo que significa que podrías necesitar más calorías totales, especialmente si tu objetivo es ganar músculo.

¿Es necesario contar calorías además de macros?

No necesariamente. El calculo de macros ya se basa en la distribución de calorías. Al seguir tus gramos de macros, intrínsecamente estás controlando tu ingesta calórica. Sin embargo, entender las calorías totales te da una perspectiva general.

¿Qué hago si tengo intolerancias alimentarias?

Adapta las fuentes de tus macronutrientes. Si eres intolerante a la lactosa, busca fuentes de proteína o calcio alternativas. Si eres celíaco, elige carbohidratos sin gluten. La clave es encontrar fuentes adecuadas para ti.

¿Cuánto tiempo se tarda en ver resultados con el calculo de macros?

Los resultados varían. Para pérdida de grasa, puedes empezar a notar cambios en 2-4 semanas. Para ganancia muscular, puede llevar más tiempo, a menudo meses de consistencia. La paciencia y la adherencia son fundamentales.

var weightInput = document.getElementById('weight'); var heightInput = document.getElementById('height'); var ageInput = document.getElementById('age'); var genderSelect = document.getElementById('gender'); var activityLevelSelect = document.getElementById('activityLevel'); var goalSelect = document.getElementById('goal'); var resultsDiv = document.getElementById('results'); var chartContainer = document.getElementById('chartContainer'); var dataTableContainer = document.getElementById('dataTableContainer'); var macroChartCanvas = document.getElementById('macroChart'); var macroTableBody = document.getElementById('macroTableBody'); var weightError = document.getElementById('weightError'); var heightError = document.getElementById('heightError'); var ageError = document.getElementById('ageError'); var chartInstance = null; function validateInput(inputElement, errorElement, min, max, name) { var value = parseFloat(inputElement.value); var isValid = true; errorElement.classList.remove('visible'); errorElement.textContent = "; if (isNaN(value) || inputElement.value.trim() === ") { errorElement.textContent = 'Este campo es obligatorio.'; errorElement.classList.add('visible'); isValid = false; } else if (value max) { errorElement.textContent = name + ' no puede ser mayor que ' + max + '.'; errorElement.classList.add('visible'); isValid = false; } return isValid; } function calculateMacros() { var weight = parseFloat(weightInput.value); var height = parseFloat(heightInput.value); var age = parseFloat(ageInput.value); var gender = genderSelect.value; var activityLevel = parseFloat(activityLevelSelect.value); var goal = goalSelect.value; var weightValid = validateInput(weightInput, weightError, 30, 300, 'El peso'); var heightValid = validateInput(heightInput, heightError, 100, 250, 'La altura'); var ageValid = validateInput(ageInput, ageError, 10, 120, 'La edad'); if (!weightValid || !heightValid || !ageValid) { resultsDiv.style.display = 'none'; chartContainer.style.display = 'none'; dataTableContainer.style.display = 'none'; return; } var bmr; if (gender === 'male') { bmr = (10 * weight) + (6.25 * height) – (5 * age) + 5; } else { bmr = (10 * weight) + (6.25 * height) – (5 * age) – 161; } var tdee = bmr * activityLevel; var targetCalories; if (goal === 'lose_weight') { targetCalories = tdee – 400; } else if (goal === 'maintain_weight') { targetCalories = tdee; } else { // gain_muscle targetCalories = tdee + 300; } // Ensure calories are not excessively low or high if (targetCalories 4000) targetCalories = 4000; var proteinGrams, carbGrams, fatGrams; var proteinPercent, carbPercent, fatPercent; // Protein: 1.6-2.2 g/kg, let's use 1.8 for maintenance/loss, 2.0 for gain var proteinMultiplier = (goal === 'gain_muscle') ? 2.0 : 1.8; proteinGrams = weight * proteinMultiplier; var proteinCalories = proteinGrams * 4; // Fat: 20-30% of total calories, let's use 25% as a base fatGrams = (targetCalories * 0.25) / 9; var fatCalories = fatGrams * 9; // Carbs: Remaining calories carbGrams = (targetCalories – proteinCalories – fatCalories) / 4; // Adjustments for extreme values or if calculation leads to negative macros if (carbGrams 0) { fatGrams -= fatReduction; deficit -= fatReduction * 9; } // If still deficit, take from protein (less ideal) if (deficit > 0) { proteinGrams -= deficit / 4; deficit = 0; // Should be zero now } // Recalculate calories based on adjusted grams targetCalories = (proteinGrams * 4) + (fatGrams * 9) + (carbGrams * 4); } // Ensure minimums if adjustments made them too low if (proteinGrams < weight * 1.2) proteinGrams = weight * 1.2; // Minimum protein if (fatGrams < weight * 0.5) fatGrams = weight * 0.5; // Minimum fat (approx 20% calories) if (carbGrams < 50) carbGrams = 50; // Minimum carbs // Recalculate target calories based on final grams to ensure consistency targetCalories = (proteinGrams * 4) + (fatGrams * 9) + (carbGrams * 4); // Calculate percentages proteinPercent = ((proteinGrams * 4) / targetCalories) * 100; fatPercent = ((fatGrams * 9) / targetCalories) * 100; carbPercent = ((carbGrams * 4) / targetCalories) * 100; // Rounding proteinGrams = proteinGrams.toFixed(0); carbGrams = carbGrams.toFixed(0); fatGrams = fatGrams.toFixed(0); proteinPercent = proteinPercent.toFixed(1); carbPercent = carbPercent.toFixed(1); fatPercent = fatPercent.toFixed(1); targetCalories = targetCalories.toFixed(0); document.getElementById('totalCalories').textContent = targetCalories + ' kcal'; document.getElementById('proteinGrams').textContent = proteinGrams + ' g'; document.getElementById('carbsGrams').textContent = carbGrams + ' g'; document.getElementById('fatGrams').textContent = fatGrams + ' g'; document.getElementById('proteinPercent').textContent = proteinPercent + '%'; document.getElementById('carbsPercent').textContent = carbPercent + '%'; document.getElementById('fatPercent').textContent = fatPercent + '%'; resultsDiv.style.display = 'block'; chartContainer.style.display = 'block'; dataTableContainer.style.display = 'block'; updateChart(targetCalories, proteinGrams, carbGrams, fatGrams); updateTable(targetCalories, proteinGrams, carbGrams, fatGrams, proteinPercent, carbPercent, fatPercent); } function updateChart(totalCalories, proteinGrams, carbGrams, fatGrams) { var proteinCalories = parseFloat(proteinGrams) * 4; var carbCalories = parseFloat(carbGrams) * 4; var fatCalories = parseFloat(fatGrams) * 9; var ctx = macroChartCanvas.getContext('2d'); // Destroy previous chart instance if it exists if (chartInstance) { chartInstance.destroy(); } chartInstance = new Chart(ctx, { type: 'pie', data: { labels: ['Proteínas', 'Carbohidratos', 'Grasas'], datasets: [{ label: 'Distribución de Calorías', data: [proteinCalories, carbCalories, fatCalories], backgroundColor: [ 'rgba(255, 99, 132, 0.7)', // Red for Protein 'rgba(54, 162, 235, 0.7)', // Blue for Carbs 'rgba(255, 206, 86, 0.7)' // Yellow for Fat ], borderColor: [ 'rgba(255, 99, 132, 1)', 'rgba(54, 162, 235, 1)', 'rgba(255, 206, 86, 1)' ], borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: true, plugins: { legend: { position: 'top', }, tooltip: { callbacks: { label: function(tooltipItem) { var dataset = tooltipItem.raw; var label = tooltipItem.label || ''; if (label) { label += ': '; } label += dataset + ' kcal'; return label; } } } } } }); } function updateTable(totalCalories, proteinGrams, carbGrams, fatGrams, proteinPercent, carbPercent, fatPercent) { var proteinCalories = parseFloat(proteinGrams) * 4; var carbCalories = parseFloat(carbGrams) * 4; var fatCalories = parseFloat(fatGrams) * 9; macroTableBody.innerHTML = ''; // Clear previous rows var row1 = macroTableBody.insertRow(); row1.insertCell(0).textContent = 'Proteínas'; row1.insertCell(1).textContent = proteinGrams + ' g'; row1.insertCell(2).textContent = proteinCalories.toFixed(0) + ' kcal'; row1.insertCell(3).textContent = proteinPercent + '%'; var row2 = macroTableBody.insertRow(); row2.insertCell(0).textContent = 'Carbohidratos'; row2.insertCell(1).textContent = carbGrams + ' g'; row2.insertCell(2).textContent = carbCalories.toFixed(0) + ' kcal'; row2.insertCell(3).textContent = carbPercent + '%'; var row3 = macroTableBody.insertRow(); row3.insertCell(0).textContent = 'Grasas'; row3.insertCell(1).textContent = fatGrams + ' g'; row3.insertCell(2).textContent = fatCalories.toFixed(0) + ' kcal'; row3.insertCell(3).textContent = fatPercent + '%'; var row4 = macroTableBody.insertRow(); row4.insertCell(0).textContent = 'Total'; row4.insertCell(1).textContent = (parseFloat(proteinGrams) + parseFloat(carbGrams) + parseFloat(fatGrams)).toFixed(0) + ' g'; row4.insertCell(2).textContent = '' + totalCalories + ' kcal'; row4.insertCell(3).textContent = '100%'; } function copyResults() { var totalCalories = document.getElementById('totalCalories').textContent; var proteinGrams = document.getElementById('proteinGrams').textContent; var carbsGrams = document.getElementById('carbsGrams').textContent; var fatGrams = document.getElementById('fatGrams').textContent; var proteinPercent = document.getElementById('proteinPercent').textContent; var carbsPercent = document.getElementById('carbsPercent').textContent; var fatPercent = document.getElementById('fatPercent').textContent; var assumptions = "Objetivo: " + document.getElementById('goal').options[document.getElementById('goal').selectedIndex].text + "\n" + "Nivel de Actividad: " + document.getElementById('activityLevel').options[document.getElementById('activityLevel').selectedIndex].text + "\n" + "Género: " + document.getElementById('gender').options[document.getElementById('gender').selectedIndex].text + "\n" + "Peso: " + document.getElementById('weight').value + " kg\n" + "Altura: " + document.getElementById('height').value + " cm\n" + "Edad: " + document.getElementById('age').value + " años\n"; var resultsText = "— Tus Macronutrientes Diarios —\n\n" + "Calorías Diarias Estimadas: " + totalCalories + "\n" + "Proteínas: " + proteinGrams + " (" + proteinPercent + ")\n" + "Carbohidratos: " + carbsGrams + " (" + carbsPercent + ")\n" + "Grasas: " + fatGrams + " (" + fatPercent + ")\n\n" + "— Supuestos Clave —\n" + assumptions; // Use a temporary textarea to copy text var textArea = document.createElement("textarea"); textArea.value = resultsText; textArea.style.position = "fixed"; textArea.style.left = "-9999px"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); var msg = successful ? 'Resultados copiados con éxito!' : 'Error al copiar.'; alert(msg); } catch (err) { alert('Error al copiar los resultados.'); } document.body.removeChild(textArea); } function resetForm() { weightInput.value = '70'; heightInput.value = '175'; ageInput.value = '30'; genderSelect.value = 'male'; activityLevelSelect.value = '1.55'; goalSelect.value = 'maintain_weight'; weightError.textContent = "; weightError.classList.remove('visible'); heightError.textContent = "; heightError.classList.remove('visible'); ageError.textContent = "; ageError.classList.remove('visible'); resultsDiv.style.display = 'none'; chartContainer.style.display = 'none'; dataTableContainer.style.display = 'none'; if (chartInstance) { chartInstance.destroy(); chartInstance = null; } } // Initial calculation on load if values are present (or defaults) document.addEventListener('DOMContentLoaded', function() { // Check if Chart.js is loaded before trying to use it if (typeof Chart === 'undefined') { console.error("Chart.js library not found. Please include it in your HTML."); chartContainer.innerHTML = "Error: Chart library not loaded."; return; } // Optionally perform an initial calculation with default values // calculateMacros(); });

Leave a Comment