答案 0 :(得分:2)
尽我所知,你要求每对N 3D球体的交叉点轨迹。 计算对称性,有N *(N-1)/ 2对。
所以拿走每一对。 如果中心之间的距离大于它们的半径之和,则没有交叉点。 (编辑:或者,正如@Ben指出的那样,如果距离小于半径的差异,也没有交叉点。)
如果相等,则交点是单个点,很容易在中心之间的线段上找到。 如果它更小,则轨迹是圆形,而不是点。
要找到该圆的中心及其半径,您需要在两个球体中采用平面切片。 这减少了找到两个圆的交集的问题。 为此,您需要Law of Cosines。
详细说明:查看维基百科图表。 a 和 b 是两个球体的半径, c 是中心之间的距离。 使用倒数第二个等式并求解 cos(alpha)。 从那以后你可以很容易地得到罪(alpha)。 然后 b sin(alpha)是圆的半径, 和 b cos(alpha)是到中心的距离。 (注意 - 这不会调用任何trig函数,只能调用 sqrt 。)
一旦知道了交点圆的中心和半径,圆圈本身就是垂直于连接球心的线段的平面。
除此之外,我不确定你想要什么。
答案 1 :(得分:1)
如果我找到了你,你想要一组N个球体中至少两个球体的所有交叉点,对吗?
如果是这样,这对于高性能计算来说并不是一个简单的问题,至少在您需要准确的解决方案时并非如此。 在计算分子的“还原表面”时也解决了这个问题:
http://www.ncbi.nlm.nih.gov/pubmed/8906967
有几篇关于如何有效计算这些点和圆圈的出版物,但这不是一件容易的事。 我相信有一本出版物用CUDA计算这些值,但我不记得细节。谷歌(学者)应该能够帮助你朝这个方向发展。
但是,根据您想要实现的目标,可以提供更简单的解决方案。 那么,也许你可以详细说明你的问题?