我想使用以下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;之间的关系是什么?和'椭圆体中心'。
答案 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
或解决方案,但结果是相同的方式,它并不重要。