计算适合另一个圆的圆周的圆数
Calculate the number of circles that fit on the circumference of another circle
我正在寻找一种算法(或伪代码),它可以计算出最大数量的(较小)直径为 "s" 的圆可以挤入另一个(较大)半径为"r" ...
图片:http://teasy.space/images/terracolony-squeezingcircles2.jpg
如果您愿意,您可以在 radius/diameter 等之间切换 - 因为这些是我仅有的 2 个参数(除了中心(大圆)坐标),即已知的......
外圈可能不重叠,但可以 "snug" 放在一起 ...
经过多年对我的例程进行各种升级后,我目前使用的算法并不完美(它需要准确,否则银河系会崩溃,哈哈)
它在小外圆直径和大内圆周长之间进行了广泛的插值,以在多边形样式拟合模式中准确地绘制圆数,这在使用较大的外圆时会导致问题(即重叠)...
; 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,这是一款包含卫星、行星、恒星、black/white 洞的 2D space/gravity 实时殖民模拟游戏,等等
图片:http://teasy.space/images/terracolony-squeezingcircles1.jpg
这是困扰这个项目十多年的问题!
希望你能给我指出正确的方向 :D
我之前做了很多实验,写了不同的程序来寻找解决方案,并且在互联网上寻找最终非常接近但不够接近的公式和解决方案! :P
谢谢! <3
轻松
P.S。我试图添加标签 "circumference" 但它显然需要“1500 信誉”(我猜想,可能是为了防止垃圾邮件)
大圆半径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
我正在寻找一种算法(或伪代码),它可以计算出最大数量的(较小)直径为 "s" 的圆可以挤入另一个(较大)半径为"r" ...
图片:http://teasy.space/images/terracolony-squeezingcircles2.jpg
如果您愿意,您可以在 radius/diameter 等之间切换 - 因为这些是我仅有的 2 个参数(除了中心(大圆)坐标),即已知的...... 外圈可能不重叠,但可以 "snug" 放在一起 ...
经过多年对我的例程进行各种升级后,我目前使用的算法并不完美(它需要准确,否则银河系会崩溃,哈哈) 它在小外圆直径和大内圆周长之间进行了广泛的插值,以在多边形样式拟合模式中准确地绘制圆数,这在使用较大的外圆时会导致问题(即重叠)...
; 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,这是一款包含卫星、行星、恒星、black/white 洞的 2D space/gravity 实时殖民模拟游戏,等等
图片:http://teasy.space/images/terracolony-squeezingcircles1.jpg
这是困扰这个项目十多年的问题! 希望你能给我指出正确的方向 :D
我之前做了很多实验,写了不同的程序来寻找解决方案,并且在互联网上寻找最终非常接近但不够接近的公式和解决方案! :P
谢谢! <3
轻松
P.S。我试图添加标签 "circumference" 但它显然需要“1500 信誉”(我猜想,可能是为了防止垃圾邮件)
大圆半径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