
1. 如何定义一个三维空间圆
假设我们有一系列点集:
其中,
那么,一个三维空间中的圆可以这样定义:
其中
- r: 半径
- C:圆心
- n: 法向量
- u: 位于圆(盘)上的任意一个垂直于n的向量。
如果我们通过 zenith angle ϕ 和 azimuth θ 明确指定这个三维圆的朝向 那么
2. 方法思路
- 使用SVD分解先拟合三维圆所在的平面
- 将去中心点后的点集投影到新二维坐标的拟合平面上
- 使用最小二乘圆拟合,得到半径与中心
- 反变换回三为维坐标系下
2.1 SVD拟合平面
关于这里可以参见我的上一篇文章pca法向求解,里面有讲到SVD分解和原理介绍
2.2 将点集投影在拟合平面上
此时我们需要借助 Rodrigues rotation,中文名叫罗德里格斯(Rodrigues)旋转公式。 传送一个公式介绍和原理推导:罗德里格斯(Rodrigues)旋转公式推导
利用该公式我们就能把三维点集投影到拟合平面上了。注意需要选择旋转轴k作为平面法向 和二维坐标系法向的叉乘。
因此
2.3 拟合投影后的二维圆
假设我们想要拟合一个由