找到椭圆体的中心
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
或解决方案,但由于结果是相同的,所以这并不重要。
我想使用以下 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
或解决方案,但由于结果是相同的,所以这并不重要。