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

如何求两相交球体交点处的切平面位置与法线向量?

两球体交点处切平面的求解方法

核心思路

两个相交球体的所有交点都在同一个平面(称为根平面)上,这个平面就是两个球体在交点处的公共切平面。求解这个平面只需要用到球心位置和半径,步骤直观易懂。

分步计算(附代码实现)

以下步骤直接对应你提供的输入参数:

Vector3 sphere1 = new Vector3(8, 6, 2);
float radius1 = 5f;

Vector3 sphere2 = new Vector3(5, 3, 8);
float radius2 = 8f;
  1. 计算球心连线向量
    先算出从第一个球心指向第二个球心的向量,这个向量的方向就是切平面的法线方向:

    Vector3 delta = sphere2 - sphere1; // 结果:(-3, -3, 6)
    
  2. 计算球心之间的距离
    用向量长度公式算出两个球心的直线距离,同时计算距离的平方以避免开根号,提升后续计算效率:

    float distance = delta.magnitude; // 结果:√(9+9+36) = √54 ≈7.348
    float distanceSq = delta.sqrMagnitude; // 结果:54
    
  3. 计算切平面的法线
    把球心连线向量单位化(转换为长度为1的向量),得到的就是切平面的法线:

    Vector3 planeNormal = delta.normalized; // 结果:(-1/√6, -1/√6, 2/√6) ≈ (-0.408, -0.408, 0.816)
    
  4. 计算切平面上的参考点
    取球心连线与切平面的交点作为平面的位置参考点。先通过公式算出该点到第一个球心的距离d1,再从第一个球心出发沿法线方向移动d1距离得到该点:

    // 推导公式:d1 = (距离² + 半径1² - 半径2²) / (2*距离)
    float d1 = (distanceSq + radius1 * radius1 - radius2 * radius2) / (2 * distance);
    Vector3 planePosition = sphere1 + planeNormal * d1; 
    // 代入数值计算:d1=(54+25-64)/(2*√54)=15/(6√6)=5/(2√6)≈1.021
    // planePosition最终结果≈(7.583, 5.583, 2.833)
    

验证逻辑

这个平面满足两个关键条件:

  • 所有同时在两个球面上的点都在该平面内
  • 平面法线与球心连线平行,保证了在交点处与两个球面都垂直,符合切平面的定义

内容的提问来源于stack exchange,提问作者Tea-F-Tea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:01:07