[Math] Best fitting circle to points in 3D

3dcirclesleast squaressvd

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:

  1. Find the centroid C (x0, y0, z0) of the points.
  2. 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
  3. Orthogonal project all points to the plane
  4. Subtract C from all points, such that C becomes the new origin O for the points. I now have a plane that crosses origin.
  5. Translate the projected points into a 2D coordinate system that lies in the plane, using this algorithm.
  6. 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
  7. 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:

Circle center is placed at the centroid of the points

Best Answer

Found the answer my self.

Using notation from this question: 2D Coordinates of Projection of 3D Vector onto 2D Plane

Find the matrix M that converts coordinates from the X, Y, Z-system to the coordinate system of the plane: N, e'1, e'2. This is a 3 x 3 matrix with e'1 as row 1, e'2 as row 2 and N as row 3. By taking the inverse (transpose) of this matrix you can convert coordinates the other way around.

Related Question