球面上的小球排列问题
假设有半径 n 的大球,n 是正整数,和半径 1 的小球,问大球表面最多可以放多少小球
(指大球和小球都是刚体,每个小球和大球都接触)
假设M(n)是半径 n 的大球表面最多可以放置的小球数量,
针对 n = 1..10 计算 M(n) 这是几何题 粗略计算,先求出大球的表面积,然后按每个小球占用的面积为一个边长 2 的等边三角形面积来算,用大球表面积去除以等边三角形的面积,向下取整,即可估算。
但目测实际能放下的球数量比这个数值小一点。大球越大,计算结果可能越接近于正解。
本帖最后由 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
小球不可以错开放吗?2个小球的结合部 镶进去一个小球?
也许更多我没算 大神算算 0xAA55 发表于 2022-10-20 18:39
粗略计算,先求出大球的表面积,然后按每个小球占用的面积为一个边长 2 的等边三角形面积来算,用大球表面 ...
小球球心共球面,要求这个共球面的面积才行 本帖最后由 Ayala 于 2022-11-2 04:10 编辑
先计算小球球心共球面面积 S0 =4*(大球半径+小球半径)^ 2 * PI
计算3球球心等边弧面面积约度(三角形) S1 = 小球半径 * 小球半径 * sqrt(3) ;实际面积比这个大,具体数值需要去积分
计算容纳约数 n= 向上取整((S0 - S1)/ S1)* 3 + 1 ;约度计算,先排除一个容纳三球的空间,这个3球空间可以容纳一个球
页:
[1]