geometry - 计算适合另一个圆的周长的圆的数量

标签 geometry collision trigonometry detection

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

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

如果您愿意,您可以在半径/直径等之间切换——因为这是我拥有的仅有的两个参数(中心(大圆)坐标除外),即已知的... 外圆可能不会重叠,但可以“紧密”地组合在一起......

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

; 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

谢谢! <3

轻松

附注我尝试添加标签“圆周”,但它显然需要“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

enter image description here

关于geometry - 计算适合另一个圆的周长的圆的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56004326/

相关文章:

Python点查找(坐标装箱?)

geometry - 如何计算边界多边形?

java - 碰撞检测: rounded object

python - arcade中的碰撞错误: When I use the arcade. python中的check_for_collision方法并发生碰撞,它给出了错误

r - 如何使用ggplot在圆内随机散布点,而不会围绕中心聚集?

algorithm - 计算用于定义二次贝塞尔曲线分段的参数

algorithm - Voronoi 图,线交叉

c++ - 2D障碍物碰撞

language-agnostic - 确定经纬度矩形和球体上的圆是否重叠

MySQL错误? (三角函数)