如果圆圈由其中心的X,Y和半径定义,那么如何找到包含给定圈数的圆?单个圆圈,是可能的最小圆圈,完全包含任意大小和位置的2个或更多圆圈.
起初我尝试通过找到中心的中点并且是新圆的中点来尝试仅包含2个圆,而半径等于2个初始圆的半径的一半和它们的中心之间的距离的一半,但不知何故它总是变得有点偏.找到半径似乎问题似乎总是存在问题,但我对此感到头疼,我无法使其工作.
我不一定需要一种方法来查找包含3个或更多圆圈的圆.我可以找到一个包含2的圆圈,取圆圈并用另一个圆圈包围它,另一个圆圈,最后一个圆圈应包含整个步骤中给出的所有圆圈.
小智 11
给定两个圆,中心为[x1,y1],[x2,y2],半径为R1和R2.封闭圆的中心是什么?
假设R1不大于R2.如果第二个圆圈较小,则只需交换它们即可.
计算圆心之间的距离.
D = sqrt((x1-x2)^ 2 +(y1-y2)^ 2)
第一个圆圈是否完全位于第二个圆圈内?因此,如果(D + R1)<= R2,那么我们就完成了.返回较大的圆作为封闭圆,中心为[x1,x2],半径为R2.
如果(D + R1)> R2,则包围圆的半径为(D + R1 + R2)/ 2
在后一种情况下,封闭圆的中心必须位于连接两个中心的线上.所以我们可以把新中心写成
center = (1-theta)*[x1,y1] + theta*[x2,y2]
Run Code Online (Sandbox Code Playgroud)
其中theta由.给出
theta = 1/2 + (R2 - R1)/(2*D)
Run Code Online (Sandbox Code Playgroud)
请注意,theta将始终为正数,因为我们已确保(D + R1)> R2.同样,我们应该能够确保theta永远不会大于1.这两个条件确保封闭中心严格位于两个原始圆心之间.
它被称为最小封闭圆("MEC"),或有时称为"最小封闭圆".
一个不错的网站:http://www.personal.kent.edu/~rmuhamma/Compgeometry/MyCG/CG-Applets/Center/centercli.htm
您手头的问题称为球的最小封闭球。我已经写了关于它的论文,请参见苏黎世联邦理工学院的“最小的球”。
您可以在Bounding Volumes包的Computational Geometry Algorithms Library(CGAL)中找到非常有效的C ++实现。(无需使用所有CGAL;只需提取所需的源文件和头文件,即可启动并运行。)
注意:如果您正在寻找一种仅计算点的最小封闭球体的算法,那么还有其他实现方法,请参阅本文。