Body Type Calculator
Determine your body type (ectomorph, mesomorph, or endomorph) from body measurements.
This estimate is based on simple frame-size ratios and is for general guidance only - it is not a medical or body-composition assessment.
About this tool
The Body Type Calculator helps you identify your somatotype β a classification system that groups people into three main body types based on skeletal frame size and proportions. Unlike BMI which measures weight relative to height, this tool uses wrist and ankle circumference measurements as indicators of your underlying bone structure. Knowing your body type is useful for setting realistic fitness goals and understanding how your metabolism naturally responds to training and diet.
To use the calculator, measure your wrist circumference just below the wrist bone and your ankle circumference at its narrowest point, using a flexible tape measure. Enter these measurements in centimeters along with your height and weight. The tool determines your body type primarily from the wrist-to-height ratio, which remains stable throughout your life since your skeletal structure is genetically determined. Your ankle measurement provides additional confirmation.
Understanding your somatotype helps you align your training style and nutritional approach to your natural body tendencies. Ectomorphs typically benefit from strength-focused training with caloric surplus; endomorphs often achieve better results with higher cardio frequency and controlled portions; mesomorphs tend to respond well to mixed training approaches. Remember that body type is your starting point, not your destiny β consistent training and proper nutrition can dramatically change your body composition regardless of your classification.
Frequently Asked Questions
Code Implementation
def classify_body_type(wrist_cm, height_cm):
"""
Classify somatotype using the wrist-to-height ratio.
Thresholds (empirical):
ratio < 0.1035 β Ectomorph (small frame)
ratio > 0.1160 β Endomorph (large frame)
otherwise β Mesomorph (medium frame)
Parameters:
wrist_cm - wrist circumference in centimetres
height_cm - height in centimetres
Returns one of: 'ectomorph', 'mesomorph', 'endomorph'
"""
ratio = wrist_cm / height_cm
if ratio < 0.1035:
return "ectomorph"
elif ratio > 0.1160:
return "endomorph"
return "mesomorph"
DESCRIPTIONS = {
"ectomorph": "Slim frame, fast metabolism, difficulty gaining muscle or fat.",
"mesomorph": "Athletic build, gains/loses weight relatively easily.",
"endomorph": "Larger frame, gains weight easily, tends to retain fat.",
}
# Examples
test_cases = [
(15.5, 180), # small wrist, tall β ectomorph
(17.5, 175), # medium β mesomorph
(21.0, 170), # large wrist β endomorph
]
for wrist, height in test_cases:
body_type = classify_body_type(wrist, height)
ratio = wrist / height
print(f"Wrist {wrist}cm / Height {height}cm = ratio {ratio:.4f} β {body_type}")
print(f" {DESCRIPTIONS[body_type]}")
Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.