# trimesh.triangles¶

## triangles.py¶

Functions for dealing with triangle soups in (n, 3, 3) float form.

Functions:

 `all_coplanar`(triangles) Check to see if a list of triangles are all coplanar `angles`(triangles) Calculates the angles of input triangles. `any_coplanar`(triangles) For a list of triangles if the FIRST triangle is coplanar with ANY of the following triangles, return True. `area`([triangles, crosses, sum]) Calculates the sum area of input triangles `barycentric_to_points`(triangles, barycentric) Convert a list of barycentric coordinates on a list of triangles to cartesian points. `bounds_tree`(triangles) Given a list of triangles, create an r-tree for broad- phase collision detection `closest_point`(triangles, points) Return the closest point on the surface of each triangle for a list of corresponding points. `cross`(triangles) Returns the cross product of two edges from input triangles `diagonal_dot`(a, b) Dot product by row of a and b. `extents`(triangles[, areas]) Return the 2D bounding box size of each triangle. `mass_properties`(triangles[, crosses, …]) Calculate the mass properties of a group of triangles. `nondegenerate`(triangles[, areas, height]) Find all triangles which have an oriented bounding box where both of the two sides is larger than a specified height. `normals`([triangles, crosses]) Calculates the normals of input triangles `point_plane_distance`(points, plane_normal[, …]) The minimum perpendicular distance of a point to a plane. `points_to_barycentric`(triangles, points[, …]) Find the barycentric coordinates of points relative to triangles. `to_kwargs`(triangles) Convert a list of triangles to the kwargs for the Trimesh constructor. `unitize`(vectors[, check_valid, threshold]) Unitize a vector or an array or row-vectors. `windings_aligned`(triangles, normals_compare) Given a list of triangles and a list of normals determine if the two are aligned
`trimesh.triangles.``all_coplanar`(triangles)

Check to see if a list of triangles are all coplanar

Parameters

triangles ((n, 3, 3) float) – Vertices of triangles

Returns

all_coplanar – True if all triangles are coplanar

Return type

bool

`trimesh.triangles.``angles`(triangles)

Calculates the angles of input triangles.

Parameters

triangles ((n, 3, 3) float) – Vertex positions

Returns

angles – Angles at vertex positions in radians Degenerate angles will be returned as zero

Return type

(n, 3) float

`trimesh.triangles.``any_coplanar`(triangles)

For a list of triangles if the FIRST triangle is coplanar with ANY of the following triangles, return True. Otherwise, return False.

`trimesh.triangles.``area`(triangles=None, crosses=None, sum=False)

Calculates the sum area of input triangles

Parameters
• triangles ((n, 3, 3) float) – Vertices of triangles

• crosses ((n, 3) float or None) – As a speedup don’t re- compute cross products

• sum (bool) – Return summed area or individual triangle area

Returns

area – Individual or summed area depending on sum argument

Return type

(n,) float or float

`trimesh.triangles.``barycentric_to_points`(triangles, barycentric)

Convert a list of barycentric coordinates on a list of triangles to cartesian points.

Parameters
• triangles ((n, 3, 3) float) – Triangles in space

• barycentric ((n, 2) float) – Barycentric coordinates

Returns

points – Points in space

Return type

(m, 3) float

`trimesh.triangles.``bounds_tree`(triangles)

Given a list of triangles, create an r-tree for broad- phase collision detection

Parameters

triangles ((n, 3, 3) float) – Triangles in space

Returns

tree – One node per triangle

Return type

rtree.Rtree

`trimesh.triangles.``closest_point`(triangles, points)

Return the closest point on the surface of each triangle for a list of corresponding points.

Implements the method from “Real Time Collision Detection” and use the same variable names as “ClosestPtPointTriangle” to avoid being any more confusing.

Parameters
• triangles ((n, 3, 3) float) – Triangle vertices in space

• points ((n, 3) float) – Points in space

Returns

closest – Point on each triangle closest to each point

Return type

(n, 3) float

`trimesh.triangles.``cross`(triangles)

Returns the cross product of two edges from input triangles

Parameters

triangles ((n, 3, 3) float) – Vertices of triangles

Returns

crosses – Cross product of two edge vectors

Return type

(n, 3) float

`trimesh.triangles.``extents`(triangles, areas=None)

Return the 2D bounding box size of each triangle.

Parameters
• triangles ((n, 3, 3) float) – Triangles in space

• areas ((n,) float) – Optional area of input triangles

Returns

box – The size of each triangle’s 2D oriented bounding box

Return type

(n, 2) float

`trimesh.triangles.``mass_properties`(triangles, crosses=None, density=1.0, center_mass=None, skip_inertia=False)

Calculate the mass properties of a group of triangles.

Parameters
• triangles ((n, 3, 3) float) – Triangle vertices in space

• crosses ((n,) float) – Optional cross products of triangles

• density (float) – Optional override for density

• center_mass ((3,) float) – Optional override for center mass

• skip_inertia (bool) – if True will not return moments matrix

Returns

info – Mass properties

Return type

dict

`trimesh.triangles.``nondegenerate`(triangles, areas=None, height=None)

Find all triangles which have an oriented bounding box where both of the two sides is larger than a specified height.

Degenerate triangles can be when: 1) Two of the three vertices are colocated 2) All three vertices are unique but colinear

Parameters
• triangles ((n, 3, 3) float) – Triangles in space

• height (float) – Minimum edge length of a triangle to keep

Returns

nondegenerate – True if a triangle meets required minimum height

Return type

(n,) bool

`trimesh.triangles.``normals`(triangles=None, crosses=None)

Calculates the normals of input triangles

Parameters
• triangles ((n, 3, 3) float) – Vertex positions

• crosses ((n, 3) float) – Cross products of edge vectors

Returns

• normals ((m, 3) float) – Normal vectors

• valid ((n,) bool) – Was the face nonzero area or not

`trimesh.triangles.``points_to_barycentric`(triangles, points, method='cramer')

Find the barycentric coordinates of points relative to triangles.

The Cramer’s rule solution implements:

http://blackpawn.com/texts/pointinpoly

The cross product solution implements:

https://www.cs.ubc.ca/~heidrich/Papers/JGT.05.pdf

Parameters
• triangles ((n, 3, 3) float) – Triangles vertices in space

• points ((n, 3) float) – Point in space associated with a triangle

• method (str) –

Which method to compute the barycentric coordinates with:
• ’cross’: uses a method using cross products, roughly 2x slower but

different numerical robustness properties

• anything else: uses a cramer’s rule solution

Returns

barycentric – Barycentric coordinates of each point

Return type

(n, 3) float

`trimesh.triangles.``to_kwargs`(triangles)

Convert a list of triangles to the kwargs for the Trimesh constructor.

Parameters

triangles ((n, 3, 3) float) – Triangles in space

Returns

kwargs – Keyword arguments for the trimesh.Trimesh constructor Includes keys ‘vertices’ and ‘faces’

Return type

dict

Examples

```>>> mesh = trimesh.Trimesh(**trimesh.triangles.to_kwargs(triangles))
```
`trimesh.triangles.``windings_aligned`(triangles, normals_compare)

Given a list of triangles and a list of normals determine if the two are aligned

Parameters
• triangles ((n, 3, 3) float) – Vertex locations in space

• normals_compare ((n, 3) float) – List of normals to compare

Returns

aligned – Are normals aligned with triangles

Return type

(n,) bool