Repository navigation
Segment inertia
segment_inertia returns the mass, the center of mass and the inertia tensor of a thigh, a shank or a foot. These are estimates for the authored template. They are not validated inertial properties of a real person.
The module is extensions/humanoid/skeleton/limb/inertia.mojo. This is not a three.js port. See Extensions.
from extensions.humanoid.sex import MALE
from extensions.humanoid.spec import HumanoidSpec
from extensions.humanoid.skeleton.limb.inertia import THIGH, segment_inertia
from units.si import FOOT, KILOGRAM, KILOGRAM_SQUARE_METER, Length
var person = HumanoidSpec(Length(6.0, FOOT), MALE)
var thigh = segment_inertia(person, THIGH)
thigh.mass.to(KILOGRAM)
thigh.xx.to(KILOGRAM_SQUARE_METER)segment is THIGH, SHANK or FOOT_SEGMENT. A bare integer is a compile error. side picks RIGHT or LEFT. step is the grid cell, 2 mm through 20 mm, 5 mm by default.
The result lives in the leg frame. The origin is the tibiofemoral joint line. Plus y is proximal. Plus x is body-right. Plus z is anterior.
| Member | Meaning |
|---|---|
mass |
The segment's mass. |
center |
The center of mass, in meters. |
xx, yy, zz
|
The moments of inertia about the center of mass, along the frame's axes. |
xy, xz, yz
|
The off-diagonal entries of the tensor: minus the products of inertia. |
length |
Joint center to joint center, or heel to toe for the foot. |
gyration(moment) |
The radius of gyration of one moment. |
The integral runs over the one skin of the limb. The final cells stop at exact segment cut planes. Each accepted cuboid includes its own inertia. See Integument. Each grid cell takes the density of what fills it.
| Fill | Density |
|---|---|
| The dermis | 1.10 g/cm³, skin_tissue
|
| Cortical or trabecular bone | The bone's apparent density |
| Marrow | 0.92 g/cm³, the named fat proxy; not a measured marrow density |
| A muscle belly | 1.06 g/cm³, muscle_tissue
|
| A tendon | 1.12 g/cm³, tendon_tissue
|
| Everything else | 0.92 g/cm³, adipose_tissue
|
Knee tissues, foot ligaments, vessels, lymphatics and nerves have no separate density assignment. A higher-priority overlapping region wins. Otherwise they use the fat proxy. No uncertainty bound is asserted. Bone pore-fluid and pore-marrow mass is not added to apparent bone mass.
De Leva (1996) provides context for these authored segment cuts. Horizontal planes through the hip joint's center, the knee's and the lateral malleolus cut the limb. The knee's center is the middle of the femoral condyles.
Use the anatomy validity report for current results. It records the exact source, spec, grid widths and density assignments. It reports mass, center and all tensor entries at three or more grid widths.
A comparison with a population mean is not validation of this authored template. The report has no matched subject data or task-specific physical acceptance threshold.
Stature must lie in 1.2 m through 2.5 m. Sex must be MALE or FEMALE. BodySide must be RIGHT or LEFT. This integral covers only the thigh, shank and foot. It does not return whole-body mass or inertia.
For engineering use, validate the geometry, tissue assignments and segment boundaries against the intended subject and task. Check grid convergence at more than one step size. A nonzero result or a passing rendering test does not establish physical accuracy.
The skin loft is a geometric envelope. It is not a measured tissue boundary. Small tissues use the density approximations listed above. Per-part solids can overlap. Do not sum their mass reports to estimate whole-body mass. The model has no constitutive law, muscle activation, joint-contact solver or uncertainty estimate.
Animation, facial shape changes and mesh simplification do not update this integral. Keep the anatomical spec and physical model separate from visual meshes. Do not compute physical properties from diagrammatically widened vessels, baked textures or a game mesh.
Use the anatomy validity report for exclusive region accounting, three-grid sampling sensitivity, independent numerical controls and explicit use gates.
Tutorials
How-to
Reference
- Scene graph
- Rotations
- Cameras
- Geometry
- Geometry addons
- Lofts and clipping groups
- Sculptor
- Procedural generators
- Meshes and assets
- Lines
- Points and sprites
- Helpers
- Scene objects
- Animated objects
- Raycasting
- Curves and paths
- Animation
- Skinning
- Materials
- Node materials
- TSL functions
- Lights
- Lighting addons
- Fog
- Textures
- Renderer
- Renderer hooks and material flags
- Rasterization
- GPU backend
- Render target
- Post-processing
- GPU computation
- Compute nodes
- Progressive light map
- Gaussian splats
- Voxel global illumination
- SVG renderer
- Image files
- Image decode queue
- Model files
- More model files
- Exporters
- Scene JSON
- Windowing and controls
- Math
- Norm consumers
- Math addons
- Units
- Coverage tool
- Commands
- Examples
- Benchmarks
- Extensions
- Shared physics
- Physics query snapshots
- Continuous collision
- Tick force restoration
- Water
- Animals
- Buildings
- CARLA
- Femur
- Tibia
- Fibula
- Patella
- Knee
- Muscles
- Vessels
- Lymph
- Nerves
- Integument
- Leg
- Foot
- Pelvis
- Torso
- Arm
- Hand
- Head
- Genome
- Game humanoid
- Humanoid fidelity
- Audio-aligned game faces
- Converted assets
- Mesh quality
- Segment inertia
Explanation
- Software rasterizer
- Scene graph as an array
- Linear color
- Normals are not colors
- Perspective correction
- Fixed-point coverage
- Per-fragment shading
- Mipmaps
- Sorted transparency
- Types and checks
- Render hooks as a trait
- Shared CPU and GPU code
- Bands and threads
- PNG structure
- Extensions beside the port
- CUDA teardown hang
- Mojo compiler hang