找到椭圆体的中心

时间:2017-12-06 18:13:09

标签: matlab math least-squares

我想使用以下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'是椭球的代数形式。所以我的问题是:'代数椭球形式与#39;之间的关系是什么?和'椭圆体中心'。

1 个答案:

答案 0 :(得分:2)

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

            ⎡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或解决方案,但结果是相同的方式,它并不重要。