确定N个球体之间的交点

时间:2011-06-24 10:42:04

标签: performance geometry scientific-computing computation

只是想知道什么是最佳方法(在速度和准确性方面)来确定N个球体上的交叉点(它被要求用于两个球体here);想知道做这件事的最佳语言是什么。关于我想要做的更详细的解释是here

2 个答案:

答案 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计算这些值,但我不记得细节。谷歌(学者)应该能够帮助你朝这个方向发展。

但是,根据您想要实现的目标,可以提供更简单的解决方案。 那么,也许你可以详细说明你的问题?

相关问题