找到椭圆体的中心

Find the center of the ellipsoid

我想使用以下 Matlab 脚本来拟合椭圆体:

https://de.mathworks.com/matlabcentral/fileexchange/24693-ellipsoid-fit

但我也想了解数学。我被困在这里:

% find the center of the ellipsoid
center = -A( 1:3, 1:3 ) \ v( 7:9 );

其中 'A' 是椭圆体的代数形式。所以我的问题是:'algebraic ellipsoid form' 和 'ellipsoid center'.

之间的关系是什么

椭球的方程在齐次坐标系中给出为

            ⎡v1 v4 v5 v7 ⎤   ⎡x⎤
            ⎢v4 v2 v6 v8 ⎥   ⎢y⎥
[x y z 1] * ⎢v5 v6 v3 v9 ⎥ * ⎢z⎥ = 0
            ⎣v7 v8 v9 v10⎦   ⎣1⎦

你也可以在没有齐次坐标的情况下写成

          ⎡v1 v4 v5⎤   ⎡x⎤                 ⎡v7⎤
[x y z] * ⎢v4 v2 v6⎥ * ⎢y⎥ + 2 * [x y z] * ⎢v8⎥ + v10 = 0
          ⎣v5 v6 v3⎦   ⎣z⎦                 ⎣v9⎦

如果第二个被加数为零,这描述了一个以原点为中心的椭圆体,因为对于每个点 [x,y,z] 其镜像 [-x,-y,-z] 将导致相同结果。所以第二个(即线性)项是将椭圆体从中心移出的原因。

如果您从以原点为中心的椭圆体开始,然后将中心移动到 [cx,cy,cz],您最终会得到某种形式的东西

                   ⎡v1 v4 v5⎤   ⎡x-cx⎤
[x-cx y-cy z-cz] * ⎢v4 v2 v6⎥ * ⎢y-cy⎥ = const.
                   ⎣v5 v6 v3⎦   ⎣z-cz⎦

或向量表示法(为所讨论的 3×3 矩阵写 A

(x-c) * A * (x-c) = x*A*x - 2*x*A*c + c*A*c = const.

我知道在 Matlab 中你需要一些 ' 在那里的某个地方来转置一些向量,但你明白了。将上面的内容与我进一步写的内容进行比较,您可以看到本质上您希望线性项相等,即

-2*x*A*c = 2*x*v(7:9)
    -A*c = v(7:9)

  ⎡v1 v4 v5⎤   ⎡cx⎤   ⎡v7⎤
- ⎢v4 v2 v6⎥ * ⎢cy⎥ = ⎢v8⎥
  ⎣v5 v6 v3⎦   ⎣cz⎦   ⎣v9⎦

这意味着您在这里有一个线性方程组,您可以使用您引用的代码求解 c。它从齐次描述中获取左上角的 3×3 矩阵,并从对应于线性项的 v 中获取三个元素(我假设可以写成 A(4, 1:3) 但我不Matlab专家)然后它使用\求解线性方程组。不确定运算符优先级是否使 - 应用于矩阵 A 或解决方案,但由于结果是相同的,所以这并不重要。