You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求内接于已知尺寸长方体且主轴定向已知的椭球的代数方程及半轴长度

求内接于已知尺寸长方体且主轴定向已知的椭球的代数方程及半轴长度

首先明确问题背景:我们有一个中心在原点、各面平行于坐标轴的长方体,尺寸为$2a \times 2b \times 2c$;现在要在这个长方体内内接一个椭球,它的三个主轴方向由给定的3×3旋转矩阵$R$的列向量指定,需要求出这三个主轴的半长轴长度$S_1, S_2, S_3$(分别对应$R$的第1、2、3列方向)。

第一步:写出椭球的代数方程

中心在原点的椭球的标准代数形式可以表示为:
$$ r^T Q r = 1 $$
其中$r = [x, y, z]^T$是空间中的点向量,$Q$是一个3×3的对称正定矩阵(保证方程表示合法的椭球)。

第二步:结合主轴方向分解矩阵$Q$

因为椭球的主轴方向由旋转矩阵$R$的列给出,而旋转矩阵是正交矩阵,所以$Q$可以做正交对角化分解:
$$ Q = R D R^T $$
这里$D$是对角矩阵,对角元对应半长轴平方的倒数:
$$ D = \begin{bmatrix} \dfrac{1}{S_1^2} & 0 & 0 \\ 0 & \dfrac{1}{S_2^2} & 0 \\ 0 & 0 & \dfrac{1}{S_3^2} \end{bmatrix} $$
从这个分解能直接看出,椭球沿$R$第$j$列方向的半长轴就是$S_j$。

第三步:利用“椭球与长方面相切”的条件列方程

椭球要内接于长方体,意味着它和长方体的6个面都相切(每个面各有一个切点)。长方体的6个面方程是$x = \pm a$、$y = \pm b$、$z = \pm c$,利用对称性,我们只需要对每个坐标轴方向的一对面取一个分析即可。

对于平面$x = a$,椭球与它相切的条件可以通过拉格朗日乘数法推导,最终得到简洁关系式:
$$ a^2 = e_1^T Q^{-1} e_1 $$
这里$e_1 = [1, 0, 0]T$是$x$轴方向的单位法向量,$Q{-1}$是$Q$的逆矩阵。

同理,对$y = b$和$z = c$面,我们可以得到另外两个条件:
$$ b^2 = e_2^T Q^{-1} e_2 $$
$$ c^2 = e_3^T Q^{-1} e_3 $$
其中$e_2 = [0, 1, 0]^T$,$e_3 = [0, 0, 1]^T$。

第四步:代入逆矩阵得到关于$S_j^2$的线性方程组

由$Q = R D RT$,可以推出$Q{-1} = R D^{-1} RT$,其中$D{-1}$是$D$的逆矩阵:
$$ D^{-1} = \begin{bmatrix} S_1^2 & 0 & 0 \\ 0 & S_2^2 & 0 \\ 0 & 0 & S_3^2 \end{bmatrix} $$

把$Q^{-1}$代入上面的三个相切条件,结合旋转矩阵的正交性展开后,假设$R$的第$i$行第$j$列元素为$r_{ij}$,最终得到线性方程组:
$$
\begin{cases}
r_{11}^2 S_1^2 + r_{21}^2 S_2^2 + r_{31}^2 S_3^2 = a^2 \\
r_{12}^2 S_1^2 + r_{22}^2 S_2^2 + r_{32}^2 S_3^2 = b^2 \\
r_{13}^2 S_1^2 + r_{23}^2 S_2^2 + r_{33}^2 S_3^2 = c^2
\end{cases}
$$

第五步:求解方程组得到半长轴长度

因为$R$是正交矩阵,这个线性方程组的系数矩阵是可逆的,因此有唯一解。解出$S_1^2, S_2^2, S_3^2$后,对每个解取正平方根,就得到了三个半长轴的长度$S_1, S_2, S_3$(椭球半轴长度必然为正,所以只取正根)。


备注:内容来源于stack exchange,提问作者user948761

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:59:52