我正在寻找一种算法(或伪码),它可以计算直径为"s“的(较小的)圆的最大数目,这些圆可以被压缩到半径为"r”的另一个(较大的)圆的圆周中。
图片:http://teasy.space/images/terracolony-squeezingcircles2.jpg
如果你愿意的话,你可以在半径/直径等之间交替--因为这是我仅有的两个参数(除了中心(大圆)坐标),也就是已知的两个参数。外圈可能不重叠,但可以合拍.
经过多年来对我日常生活的各种升级,我目前正在使用一种算法,这种算法不完美(需要精确,或者星系分解了lol),它在小的外圈直径和大的内圆圆周之间进行了广泛的插值,以比较精确的方式绘制圆圈数的多边形拟合模式,这会导致使用较大的外圈时出现的问题(即重叠)。
; 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的项目中使用了这个算法,它基于重力井,这是一个二维空间/重力实时殖民模拟游戏,包含卫星、行星、恒星、黑洞/白洞等。
图片:http://teasy.space/images/terracolony-squeezingcircles1.jpg
这是一个困扰这个项目十多年的问题!希望你能为我指明正确的方向。
我以前做过许多实验,编写了不同的程序来寻找一个解决方案,我还在互联网上寻找最终非常接近但不够接近的公式和解决方案!
谢谢!<3
特莱
我试图添加“周长”这个标签,但它显然需要"1500声誉“(我猜可能是为了防止垃圾邮件)。
发布于 2019-05-06 15:28:11
建立了大圆半径( 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

https://stackoverflow.com/questions/56004326
复制相似问题