Skip to main content

Module recognize

Module recognize 

Source
Expand description

Canonical recognition: deciding that a set of points is a plane, a cylinder, a cone, a sphere or a torus, not that it resembles one.

The input is samples with normals; the output is the canonical surface and the worst deviation actually measured, or nothing. A fit is easy; the decision is the product, and a wrong yes gives a solid that measures nearly right with the wrong surface under every later operation. So every candidate is verified against all the samples at the caller’s stated tolerance, and the reported deviation is the certificate.

The first estimates are closed forms. A plane is the point covariance’s smallest direction, and a sphere linear least squares through the |c|² − r² substitution. A cylinder, a cone and a torus are surfaces of revolution, every normal line of which meets the axis: the axis is the line that best meets them all, found linearly in Plücker coordinates and reweighted against the few samples off the surface, and the kind’s profile (a line, a slanted line) is then fitted in the plane through it. A torus’s tube radius is read from how fast its normals turn, and its spine as the circle the samples land on when shifted back along their normals by that radius. Normals estimated from a mesh’s facets are only good to a fraction of the facet angle, so each estimate is refined by least squares on the samples’ own distances to the surface, which is what the verification measures.

Structs§

Recognized
A recognition with its certificate.

Enums§

Canonical
A canonical surface a set of samples was recognized as.

Functions§

recognize_points
Recognize a canonical surface from samples with unit normals.