球体 - 球体交点:距离矢量

时间:2011-02-23 10:08:28

标签: math

有没有办法找出2个球体之间的交叉距离?我理解当两个球体相交时形成的交叉圆。但是我想要计算的是,我需要多少才能将圆圈1推到外面,这样它们就不会相交,而是处于彼此接触的位置。我拥有的唯一数据是球体的中心和它们各自的半径。

谢谢

3 个答案:

答案 0 :(得分:2)

定义两个球体,其中心位于向量 a b (即 a = a x i + a y j + a z k )。

从球体A的中心到球体B的中心定义矢量 c

c = b - a

其长度为| c | = | b - a |
= sqrt([b x - a x ] 2 + [b y - a y < / sub>] 2 + [b z - a z ] 2

正如马赫什所说,两个球体之间的距离是:

| d | = | c | - r A - r B

因此,从球体A的最远点到B的最远点的向量 d 将指向 c (当球体尚未交叉时)或在相反的方向(当球体相交时)。

要移动一个球体以使它们不相交,您需要通过 d 移动它。由于这是 c ,我们可以将 c 乘以一个因子来得到 d 的成分:

f =(| d | / | c |)
d = f * c

例如,在x方向:

d x = f * c x

所以我想说试试这个:

  • 从A和B的位置向量计算位移 c 的分量。
  • 从其组件
  • 计算 c 的长度
  • 从c的长度和半径
  • 计算 d 的长度
  • 计算 c d 之间的因子f
  • 通过因子f缩放 c 的成分来计算 d 的成分。

您可以通过测试f上的符号来测试球体是否相交:如果它是负的,则球体相交。然后,您可以通过 d 移动A或B,或者通过 d 的某个部分移动它们,以便它们不再相交。

答案 1 :(得分:1)

( radius1 + radius2 ) - ( Current distance between the two centers )是一个球体移动到彼此之间的距离。 (假设球体目前相交)

答案 2 :(得分:0)

如果您知道两个球体重叠,那么您可以计算它们的中心之间的距离。然后,您可以将两个球体的半径相加,以获得球体必须相互之间的最小距离,使得它们仅在一个点处接触。两者之间的差异(半径之和减去中心之间的距离)应该是球体需要彼此分开的量,以便它们仅在某一点接触。