elflyao 发表于 2022-10-20 11:23:11

球面上的小球排列问题

假设有半径 n 的大球,n 是正整数,和半径 1 的小球,
问大球表面最多可以放多少小球
(指大球和小球都是刚体,每个小球和大球都接触)

假设M(n)是半径 n 的大球表面最多可以放置的小球数量,
针对 n = 1..10 计算 M(n)

tlwh163 发表于 2022-10-20 17:29:13

这是几何题

0xAA55 发表于 2022-10-20 18:39:59

粗略计算,先求出大球的表面积,然后按每个小球占用的面积为一个边长 2 的等边三角形面积来算,用大球表面积去除以等边三角形的面积,向下取整,即可估算。
但目测实际能放下的球数量比这个数值小一点。大球越大,计算结果可能越接近于正解。



usr 发表于 2022-10-20 18:52:42

本帖最后由 usr 于 2022-10-20 19:15 编辑

试试这个:

#include <stdio.h>
#include <math.h>

#define PI (3.14159292653f)

int M(int n)
{
        return floor(PI * (n + 1) * (n + 1));
}

void main()
{
        int n;
        scanf("%d", &n);
        printf("%d\n", M(n));
}

/4

tlwh163 发表于 2022-10-22 11:30:14

小球不可以错开放吗?2个小球的结合部 镶进去一个小球?
也许更多我没算 大神算算

Ayala 发表于 2022-11-2 03:44:34

0xAA55 发表于 2022-10-20 18:39
粗略计算,先求出大球的表面积,然后按每个小球占用的面积为一个边长 2 的等边三角形面积来算,用大球表面 ...

小球球心共球面,要求这个共球面的面积才行

Ayala 发表于 2022-11-2 03:58:38

本帖最后由 Ayala 于 2022-11-2 04:10 编辑

先计算小球球心共球面面积                S0 =4*(大球半径+小球半径)^ 2 * PI
计算3球球心等边弧面面积约度(三角形)        S1 = 小球半径 * 小球半径 * sqrt(3)    ;实际面积比这个大,具体数值需要去积分
计算容纳约数                        n= 向上取整((S0 - S1)/ S1)* 3 + 1            ;约度计算,先排除一个容纳三球的空间,这个3球空间可以容纳一个球

页: [1]
查看完整版本: 球面上的小球排列问题