【问题标题】:Finding points of intersection when two spheres intersect当两个球体相交时找到交点
【发布时间】:2011-02-19 03:40:40
【问题描述】:

我有中心(xyz - 在 3 维空间中)和两个球体 A 和 B 的半径。

现在我必须找出这些球体相交的一点或多于 1 个点。判断两个球体是否碰撞相当容易,但我如何找出两个球体的交点?

任何帮助将不胜感激。

【问题讨论】:

  • 你的意思是交点,对吧?
  • 两个球体碰撞或相交时形成的圆圈 - 是的!
  • 当我们有 N 个球体时会发生什么?

标签: math collision


【解决方案1】:

它们相交的曲线是一个圆。圆的半径方程有点复杂,但在方程中显示为here。如图 8 所示,该圆距其中一个球体中心的距离如方程式所示。 5.

【讨论】:

  • 那是假的,相交的曲线不是圆。
  • @Dominar:我不太确定你是不是认真的,但是如果你阅读我帖子中的链接,你会发现相交的曲线是一个圆。
【解决方案2】:

如果小球的半径是A,大球的半径是B,它们的圆心相距D个单位,那么交点在半径为r的圆上,圆心在两个圆心之间球体,距离较大球体中心的 y 个单位,距离另一个球体中心的 x 个单位,其中

y = 1/2 (D + (B^2 - A^2)/D)

x = 1/2 (D - (B^2 - A^2)/D)

有半径

r = B^2 - x^2 = A^2 - y^2

如果你需要这个圆的方程,最好的方法是将它表示为一组三个参数化的方程,其中 x、y 和 z 坐标分别表示为某个 t 的函数,它表示移动的半径矢量绕一圈,从零到2PI...

要构造这些方程,请考虑在垂直于两个球体之间的线的 2D 平面上表示距中心半径为 r 的点。

查看link 了解如何执行此操作的一些 iedas..

推导如下:在两个球体的中心之间画一条线。将其标记为 D
在这条线上指定一个点作为最终解决方案圆的中心,将其标记为点 O
将 D 的较小部分标记为 x,将较大部分标记为 y
从 O 垂线到 D 画一条线,一段距离 r 表示解圆的半径
将此半径的末端标记为 Q 现在在较大球体的中心到 Q 和 A 从较小球体的中心和 Q 之间绘制 B

来自毕达哥拉斯:
B^2 = y^2 + r^2 和 A^2 = x^2 + r^2
所以,在消除 r 和一点代数之后,
y-x = (B^2 - A*2) / (x+y)
但是 x+y = D 所以,

y-x = (B^2 - A*2) / D

将等式x+y=D添加到上面消除x,得到

2y = D + (B^2 - A*2) / D
或者,

y = 1/2 (  D  + (B^2 - A*2) / D  )

【讨论】:

  • 这不可能,因为单位不起作用(即,将 D 添加到 B^2 没有意义)。也许应该是 sqrt(B^2-A^2)?
  • @tom,是的,你说得对,我抄写公式时漏掉了一个 D。我将添加推导
猜你喜欢
  • 2013-02-28
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多