Определите n сфер так, чтобы никакие 2 сферы не пересекались друг с другом.

У меня есть вопрос по матлабу/математике,

Я хочу определить n сфер (каждая сфера должна быть определена одной трехмерной точкой и радиусом), чтобы никакие две сферы не перекрывали друг друга. Сферы должны быть совершенно случайными (если они не перекрывают друг друга).

Есть ли эффективный способ сделать это?

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

у кого есть более умный способ?

Спасибо


person David    schedule 15.04.2018    source источник
comment
Как должны быть распределены сферы? Например. равномерно в пределах определенной границы, нормально или что-то другое? Кроме того, случайным является только местоположение или радиус каждой сферы?   -  person Leander Moesinger    schedule 15.04.2018
comment
И центр, и радиус каждой сферы должны быть случайными. он должен быть равномерно распределен, что означает, что каждая точка в трехмерном пространстве должна иметь одинаковую вероятность быть выбранной в качестве центра сферы (если только точка в настоящее время не находится внутри другой сферы). но, как прокомментировал ниже MBo, возможно, это невозможно.   -  person David    schedule 16.04.2018
comment
@David Подумайте о том, чтобы ответить на все ваши вопросы и принять то, что вам помогло. Это обычная практика в SO, чтобы в будущем люди знали, что ответ правильный.   -  person Ander Biguri    schedule 14.09.2018
comment
Не на все свои вопросы я в конце концов получил ответ, на который рассчитывал. Действительно, в этом случае я думал, что принял ответ, но, видимо, нет. Я принял это сейчас. Спасибо.   -  person David    schedule 14.09.2018


Ответы (1)


Генерировать «полностью случайные» данные невозможно, всегда существуют какие-то ограничения.

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

person MBo    schedule 15.04.2018
comment
Интересный. Я не знал, что это невозможно. Про диаграмму Вороного почитаю, спасибо. Итак, вы говорите, что сначала я выбираю n случайных 3D-точек (n центров) без каких-либо ограничений. затем я использую диаграмму Вороного для расчета n радиусов? - person David; 16.04.2018
comment
Любой метод генерации случайных чисел имеет некоторые параметры, поэтому без каких-либо ограничений говорить сложно. - person MBo; 16.04.2018
comment
Давайте предположим, что функция matlab rand() является идеальной однородной случайной генерацией. так вы имели в виду, что я должен сначала вычислить n центров случайным образом (скажем, center=rand(n,3)) и затем вычислить радиусы, используя voronoi? - person David; 16.04.2018
comment
Да, я имел в виду именно такой подход. - person MBo; 16.04.2018