I have a set of n ≥ 3 points in 3D that are measurements of a possible circle. The measured points are "noisy" so best-fitting algorithms are involved. I'm programming in C# and have put together some algorithms to do my procedure to find the best fitting circle to the points.
My procedure is the following:
- Find the centroid C (x0, y0, z0) of the points.
- Find the best fitting plane for the points using SVD. I now have a normalvector N [a, b, c] and a point C, fully describing the plane P
- Orthogonal project all points to the plane
- Subtract C from all points, such that C becomes the new origin O for the points. I now have a plane that crosses origin.
- Translate the projected points into a 2D coordinate system that lies in the plane, using this algorithm.
- With the points now described in a 2D coordinate system, i can use Levenberg-Marquardt to find the best fitting cirlce. This gives me a circle center A (a, b) and a radius R
- The found circle center is described in the 2D coordinate system of the plane P
Now; my question:
How do I translate the found circle center A to the original 3D coordinate system?
I've tried to do A + C but this produces the following, which places the circle center in the centroid of the points:
