По сути, то, что я хочу сделать, это настроить начальные условия для моделирования галактики из n тел. Документ, который я пытался найти, находится здесь http://arxiv.org/abs/1204.0513.
В статье описываются две функции плотности:
функция поверхностной плотности формы rho (r) для плотности на расстоянии r от центра
и функция плотности формы rho (r, z), где z представляет собой компонент z в координатах (x, y, z).
Что я сделал до сих пор для каждой частицы (звезды):
- используйте метод Монте-Карло с первой функцией, чтобы получить расстояние от центра галактики
- используйте метод Монте-Карло со второй функцией, чтобы получить компонент z
- случайным образом генерировать координаты x,y на окружности радиуса r на высоте z
Но, возможно, код для этого был бы более полезным:
/* generate 3 random numbers x,y,z having a domain from 0 to 1 (not including 0.0) */
// The distance from the galaxy center for the current star.
// Rs is a constant parameter in the surface density function.
float r = -Rs * log(1.0f - x);
// The z coordinate for the current star
float Sz = -0.5f * (0.1f * Rs) * log(-((z-1)/z));
// The x,y coordinates for the current star
float Sx = sqrt(r*r - Sz*Sz) * cos(2.0f * PI * y);
float Sy = sqrt(r*r - Sz*Sz) * sin(2.0f * PI * y);
Визуально это создает ожидаемую форму, пока не возникает очевидная ситуация, а именно, если сгенерированное значение Sz выше, чем сгенерированное значение r.
Итак, мой вопрос, во-первых, если я вообще на правильном пути, и если да, то может ли кто-нибудь предложить механизм коррекции для описанного выше случая или альтернативный метод генерации этих координат.