gpt4 book ai didi

c# - 找到包含其他圆圈的最小圆圈?

转载 作者:可可西里 更新时间:2023-11-01 08:16:53 25 4
gpt4 key购买 nike

如果圆由其中心的 X、Y 和半径定义,那么如何找到包含给定数量的圆的圆?一个圆圈,它是完全包含 2 个或更多任意大小和位置的圆圈的最小可能圆圈。

起初,我尝试通过找到中心的中点来包围 2 个圆,并且这是新圆的中点,而半径等于 2 个初始圆的半径的一半和它们中心之间距离的一半,但不知何故,它总是有点偏离。问题似乎总是找到半径的问题,但我对此很头疼,我无法让它工作。

我不一定需要找到包含 3 个或更多圆的圆的方法。我可以找到一个包含 2 的圆圈,取该圆圈并用另一个圆圈包围它,然后另一个圆圈应该包含整个步骤中给出的所有圆圈。

最佳答案

给定两个圆,圆心为 [x1,y1]、[x2,y2],半径为 R1 和 R2。外接圆的圆心是多少?

假设 R1 不大于 R2。如果第二个圆圈较小,则交换它们。

  1. 计算圆心之间的距离。

    D = sqrt((x1-x2)^2 + (y1-y2)^2)

  2. 第一个圆圈是否完全位于第二个圆圈内?因此,如果 (D + R1) <= R2,那么我们就完成了。返回较大的圆作为外接圆,圆心为 [x2,y2],半径为 R2。

  3. 如果 (D+R1) > R2,则外接圆的半径为 (D+R1+R2)/2

在后一种情况下,封闭圆的中心必须位于连接两个中心的线上。所以我们可以把新中心写成

center = (1-theta)*[x1,y1] + theta*[x2,y2]

θ由

给出
theta = 1/2 + (R2 - R1)/(2*D)

请注意,theta 始终为正数,因为我们已确保 (D+R1) > R2。同样,我们应该能够确保 theta 永远不会大于 1。这两个条件确保包围中心严格位于两个原始圆心之间。

关于c# - 找到包含其他圆圈的最小圆圈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2084695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com