【问题标题】:Calculate the number of circles that fit on the circumference of another circle计算适合另一个圆的圆周的圆的数量
【发布时间】:2019-05-06 11:29:41
【问题描述】:

我正在寻找一种算法(或伪代码),它可以计算直径为“s”的(较小)圆的最大数量,这些圆可以挤入另一个半径为“r”的(较大)圆的圆周中。 ..

图片:http://teasy.space/images/terracolony-squeezingcircles2.jpg

如果您愿意,您可以在半径/直径等之间交替 - 因为这些是我仅有的 2 个参数(除了中心(大圆)坐标),即已知的... 外圈可能不重叠,但可以“贴合”在一起......

多年来对我的例行程序进行了各种升级后,我目前使用的算法并不完美(它需要准确,否则星系会崩溃哈哈) 它在小外圆直径和大内圆周长之间进行了广泛的插值,以稍微准确地绘制多边形样式拟合模式中的圆数,这在使用较大的外圆时会导致问题(即重叠)......

; try to fit a random number of circles
num_Circles = Rand( min,max )
; check if the number of circles exceed the maximum that can fit
If num_Circles * SmallCircle_Diameter > LargeCircle_Circumference
    ; adjust the amount accordingly
    num_Circles = LargeCircle_Circumference / SmallCircle_Diameter
End If

另一个假设是较小的外圆的大小永远不会超过较大的内圆...... 不用担心的事情;)

我将这个算法用于我的一个名为 Terra Colony 的项目,该项目基于 Gravity Well,这是一款 2D 空间/重力实时殖民模拟游戏,包含卫星、行星、恒星、黑洞/白洞等

图片:http://teasy.space/images/terracolony-squeezingcircles1.jpg

这是困扰这个项目十多年的问题! 希望你能指出我正确的方向:D

我之前做过很多实验并编写了不同的程序来寻找解决方案,并且在互联网上寻找最终非常接近但不够接近的公式和解决方案! :P

谢谢!

逗弄

附:我试图添加标签“周长”,但它显然需要“1500 声望”(我猜是为了防止垃圾邮件)

【问题讨论】:

    标签: geometry collision trigonometry detection


    【解决方案1】:

    大圆半径R、小圆半径r与(接触)小圆的个数N之间有建立关系的公式>

    R = r / Sin(Pi/N)
    

    所以小圆圈的最大数量可能是

    Sin(Pi/N) = r / R
    Pi / N = arcsin(r / R)
    and finally
    N = Pi / arcsin(r / R)
    

    例子:

    R=5
    r=2.5 
     so 
    N = Pi / arcsin(1/2) = 
        Pi / (Pi/6) = 
        6
    

    【讨论】:

    • 哇!非常感谢您的快速回复……让我试试吧!
    猜你喜欢
    • 2017-06-24
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    相关资源
    最近更新 更多