Math 球体-球体相交:距离向量

Math 球体-球体相交:距离向量,math,Math,有没有办法找出两个球体相交的距离?我知道当两个球体相交时,就形成了相交圆。但我想计算出的是,我需要将圆1向外推多少,这样它们就不会相交,并且处于彼此接触的位置。我仅有的数据是球体的中心和它们各自的半径 谢谢如果您知道两个球体重叠,那么您可以计算它们中心之间的距离。然后可以将两个球体的半径相加,以获得球体之间的最小距离,从而使它们仅在某一点接触。两个球体之间的差值(半径之和减去中心之间的距离)应该是球体需要彼此分开以使其仅在某一点接触的量。如果您知道两个球体重叠,则可以计算其中心之间的距离。然后可

有没有办法找出两个球体相交的距离?我知道当两个球体相交时,就形成了相交圆。但我想计算出的是,我需要将圆1向外推多少,这样它们就不会相交,并且处于彼此接触的位置。我仅有的数据是球体的中心和它们各自的半径


谢谢

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

如果您知道两个球体重叠,则可以计算其中心之间的距离。然后可以将两个球体的半径相加,以获得球体之间的最小距离,从而使它们仅在某一点接触。两者之间的差值(半径之和减去中心之间的距离)应为球体需要彼此分开以使其仅在某一点接触的量。

(半径1+半径2)-(两个中心之间的当前距离)
是两个球体之间精确接触所需移动的距离。(假设球体当前相交)

(半径1+半径2)-(两个中心之间的当前距离)
是球体中任何一个移动以精确接触彼此的距离量。(假设球体当前相交)

定义两个球体,其中心位于位置向量a和b(即a=axi+ayj+azk)

定义从球体a中心到球体B中心的向量c:

c=b-a

其长度为| c |=| b-a|
=sqrt([bx-ax]2+[by-ay]2+[bz-az]2)

如Mahesh所述,两个球体之间的距离为:

|d |=| c |-rA-rB

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

要移动一个球体使其不相交,需要将其移动d。因为这是沿着c的方向,我们可以将c乘以一个因子,得到d的分量:

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

例如,在x方向:

dx=f*cx

所以我想说试试这个:

  • 根据A和B的位置向量计算位移c的分量
  • 根据c的分量计算c的长度
  • 根据c的长度和半径计算d的长度
  • 计算c和d之间的因子f
  • 通过按因子f缩放c的分量来计算d的分量

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

定义两个球体,其中心位于位置向量A和B(即A=axi+ayj+azk)

定义从球体a中心到球体B中心的向量c:

c=b-a

其长度为| c |=| b-a|
=sqrt([bx-ax]2+[by-ay]2+[bz-az]2)

如Mahesh所述,两个球体之间的距离为:

|d |=| c |-rA-rB

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

要移动一个球体使其不相交,需要将其移动d。因为这是沿着c的方向,我们可以将c乘以一个因子,得到d的分量:

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

例如,在x方向:

dx=f*cx

所以我想说试试这个:

  • 根据A和B的位置向量计算位移c的分量
  • 根据c的分量计算c的长度
  • 根据c的长度和半径计算d的长度
  • 计算c和d之间的因子f
  • 通过按因子f缩放c的分量来计算d的分量

您可以通过测试f上的符号来测试球体是否相交:如果为负数,则球体相交。然后,你可以将A或B移动d,或同时移动d的某一部分,使它们不再相交。

假设三维空间,那么(半径1+半径2)-(两个中心之间的当前距离)将是对象在x、y和z中移动的距离???@Krishnan-不,这是距离的大小。如果你想得到移动球体所需要的向量,你需要给我们更多的信息,因为有无数种方法可以移动球体,使它们只在某一点接触。你可能想在两个中心之间的直线上得到一个单位向量,然后按上述距离缩放该向量。好问题。假设两个相交的球体中心位于X轴上。现在,球体与另一个球体精确接触的中心移动将仅沿X轴,而不是沿所有3轴。@templatetypedef:不幸的是,这就是我所掌握的全部信息。两个中心及其各自的半径。我在这里试图解决的是一个大时间步长模拟和两个球体相交的情况。在这种情况下,要知道在一个特定的方向上有多远,我必须把球体向外推,这样它就只是一个碰撞处理问题,从那里开始,这个问题已经得到了处理。假设三维空间,