我有中心(xyz - 在 3 维空间中)和两个球体 A 和 B 的半径。
现在我必须找出这些球体相遇的一个点或一个以上的点。判断两个球体是否碰撞相当容易,但我如何找出两个球体的交点?
任何帮助将不胜感激。
它们相交的曲线是一个圆。圆的半径方程有点复杂,但在 eqn中显示在这里。如图 8 所示,该圆距其中一个球体中心的距离如方程式所示。5.
如果小球的半径是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 的点。
查看此链接以获取有关如何执行此操作的一些 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 和一点代数之后,
yx = (B^2 - A*2) / ( x+y)
但是 x+y = D 所以,
yx = (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 )