Given a roughly torus-shaped 3D object: it has cylindrical symmetry, one axis of rotation, and is symmetric with respect to any angle around that axis.
Imagine a donut, but with any number of ridges and deformations, as long as they obey cylindrical symmetry.
I want to apply a RANSAC fit for this object, i.e. with a sample of n random points that are assumed to lie on the object, I want to guess the position and orientation of the object.
As far as I see, if you draw a line through any point on the surface, perpendicular to the surface, it will intersect the central axis (or be parallel to the axis). So it should be possible to calculate the axis with enough points.
Without knowing the exact shape and size of the object,
given only n random points on the surface and their surface normals,
- How can I determine the axis?
- What is the smallest number of points I need? (ignoring degenerative cases)
Or in other words: given n skew lines that all intersect the same common line A, how can I determine line A?
(Update) I worked out a partial solution using 2 surface points, assuming I already know EITHER the direction of the axis, OR a point on the axis:
- construct a plane through each surface point,
- spanned by the surface normal and the axis direction (if I know the direction),
- OR spanned by the surface normal and the vector from the surface point to the axis point (if I know such a point).
- intersect the two planes
- the intersection is the axis of symmetry.
So I can do a RANSAC fit by choosing a random direction or a random axis point. A solution without such arbitrary guesses would be more robust though.