Как упаковать шары в сфере?

136
19 ноября 2019, 05:30

Есть алгоритм для построения шаров по поверхности сферы

private Vector3 GetVector(float length, int index)
{
    var inc = Mathf.PI * (3 - Mathf.Sqrt(5));
    var off = 2 / length;
    var y = index * off - 1 + (off / 2);
    var r = Mathf.Sqrt(1 - y * y);
    var value = index * inc;
    return new Vector3(Mathf.Cos(value) * r, y, Mathf.Sin(value) * r) * radius;
}

Может кто знает алгоритм именно для заполнения сферы шарами ?

Текущий результат:

Answer 1

Постройте плотнейшую упаковку шаров - ГЦК или ГПУ.

Для гексагональной упаковки формулы координат центров есть в вики. В единицах радиуса шарика

 x = 2*i + (j+k) mod 2
 y = Sqrt(3) * (j + 1/3 * (k mod 2))
 z = Sqrt(8/3) * k

Так что достаточно пройти по индексам слоя (k) и внутрислойным (i,j) и заполнить сферу. Код на Python :

import math
rbig = 3
rsmall = 1
rad = rbig / rsmall
sq8 = math.sqrt(8/3)
sq3 = math.sqrt(3)
krange = math.ceil(rad / sq8)
for k in range(-krange,krange+1):
    z = sq8 * k
    for j in range(-krange,krange+1):
        y = sq3 * (j + 1/3 * (k % 2))
        for i in range(-krange,krange+1):
            x = 2 * i + (j + k) % 2
            if x*x + y*y + z*z <= rad * rad:
                print(x*rsmall, y*rsmall, z*rsmall)
READ ALSO
RichTextBox как пользоваться

RichTextBox как пользоваться

Подскажите пожалуйста, как пользоваться RichTextBox? Как вставлять текст и менять его внешний вид(цвет или задний фон отдельных слов и тп

123
Сделать традиционный выделенный маршрут в asp.net core

Сделать традиционный выделенный маршрут в asp.net core

Все облазил, не могу сообразить, как сделать следующее: 1Если человек в адресной строке пишет: mysite

131
Взаимодействие между формами

Взаимодействие между формами

есть главная форма, из нее открываются все остальныеодна из них должна задавать например цвет всем другим формам

119
Представление EF c modelBuilder.Query

Представление EF c modelBuilder.Query

Подскажите какую библиотеку подключить для использования конструкцииQuery:

98