trimesh.inertia module¶
inertia.py¶
Functions for dealing with inertia tensors.
Results validated against known geometries and checked for internal consistency.
- trimesh.inertia.cylinder_inertia(mass: float | floating | int | integer | unsignedinteger, radius: float | floating | int | integer | unsignedinteger, height: float | floating | int | integer | unsignedinteger, transform: Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) ndarray[tuple[int, ...], dtype[float64]] ¶
Return the inertia tensor of a cylinder.
- Parameters:
mass (float) – Mass of cylinder
radius (float) – Radius of cylinder
height (float) – Height of cylinder
transform ((4, 4) float) – Transformation of cylinder
- Returns:
inertia – Inertia tensor
- Return type:
(3, 3) float
- trimesh.inertia.principal_axis(inertia: Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes])¶
Find the principal components and principal axis of inertia from the inertia tensor.
- Parameters:
inertia ((3, 3) float) – Inertia tensor
- Returns:
components ((3,) float) – Principal components of inertia
vectors ((3, 3) float) – Row vectors pointing along the principal axes of inertia
- trimesh.inertia.radial_symmetry(mesh)¶
Check whether a mesh has radial symmetry.
- Returns:
symmetry (None or str) – None No rotational symmetry ‘radial’ Symmetric around an axis ‘spherical’ Symmetric around a point
axis (None or (3,) float) – Rotation axis or point
section (None or (3, 2) float) – If radial symmetry provide vectors to get cross section
- trimesh.inertia.scene_inertia(scene, transform: Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes] | None = None) ndarray[tuple[int, ...], dtype[float64]] ¶
Calculate the inertia of a scene about a specific frame.
- Parameters:
scene (trimesh.Scene) – Scene with geometry.
transform (None or (4, 4) float) – Homogeneous transform to compute inertia at.
- Returns:
moment – Inertia tensor about requested frame
- Return type:
(3, 3)
- trimesh.inertia.sphere_inertia(mass: float | floating | int | integer | unsignedinteger, radius: float | floating | int | integer | unsignedinteger) ndarray[tuple[int, ...], dtype[float64]] ¶
Return the inertia tensor of a sphere.
- Parameters:
mass (float) – Mass of sphere
radius (float) – Radius of sphere
- Returns:
inertia – Inertia tensor
- Return type:
(3, 3) float
- trimesh.inertia.transform_inertia(transform: Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes], inertia_tensor: Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes], parallel_axis: bool = False, mass: float | floating | int | integer | unsignedinteger | None = None)¶
Transform an inertia tensor to a new frame.
Note that in trimesh mesh.moment_inertia is axis aligned and at mesh.center_mass.
So to transform to a new frame and get the moment of inertia at the center of mass the translation should be ignored and only rotation applied.
If parallel axis is enabled it will compute the inertia about a new location.
More details in the MIT OpenCourseWare PDF:
` MIT16_07F09_Lec26.pdf`
- transform(3, 3) or (4, 4) float
Transformation matrix
- inertia_tensor(3, 3) float
Inertia tensor.
- parallel_axisbool
Apply the parallel axis theorum or not. If the passed inertia tensor is at the center of mass and you want the new post-transform tensor also at the center of mass you DON’T want this enabled as you only want to apply the rotation. Use this to get moment of inertia at an arbitrary frame that isn’t the center of mass.
- transformed(3, 3) float
Inertia tensor in new frame.