Рассчитайте количество окружностей, которые подходят по окружности другого круга - PullRequest
0 голосов
/ 06 мая 2019

Я ищу алгоритм (или псевдокод), который может вычислить максимальное количество (меньших) кругов с диаметром "s", которые можно втиснуть в окружность другого (большего) круга с радиусом "r". ..

Изображение: http://teasy.space/images/terracolony-squeezingcircles2.jpg

Вы можете чередовать радиус / диаметр и т. Д., Если хотите - так как это единственные 2 параметра (кроме координаты центра (большого круга)), которые у меня есть, т.е. известны ... Внешние круги могут не перекрываться, но могут плотно прилегать друг к другу ...

После различных улучшений моей рутины на протяжении многих лет, я в настоящее время использую не идеальный алгоритм (и он должен быть точным, иначе галактика сломается) который выполняет широкую интерполяцию между малым диаметром внешнего круга и большой окружностью внутреннего круга, чтобы несколько точнее отобразить число кругов в шаблоне подгонки в стиле многоугольника, что вызывает проблемы (т.е. перекрытия) при использовании больших внешних кругов ...

; 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 </p>

Teasy

P.S. Я пытался добавить тег «окружность», но для него, по-видимому, требуется «1500 репутации» (баллы, которые я предполагаю, возможно, для предотвращения спама)

1 Ответ

1 голос
/ 06 мая 2019

Существует формула, устанавливающая соотношение между радиусом большого круга 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

...