Я кодирую, чтобы имитировать рост сферы в среде решения. Я делаю так.Создать кластер со случайным числом
Создать пространство и положить ячейку в центр в качестве семени.
pSpace = new char[nXRange * nYRange * nZRange]; for (int i = 0; i < nZRange; i++) for (int j = 0; j < nYRange; j++) for (int k = 0; k < nXRange; k++) pSpace[i * nXRange * nYRange + j * nXRange + k] = 0; pSpace[nXRange * nYRange * nZRange/2 + nXRange * nYRange/2 + nXRange/2] = 1;
Создайте ячейку в решении. Позиция ячейки создается случайным числом.
int nXPostion = (int)(((float)rand()/RAND_MAX) * (nXRange - 1)); int nYPostion = (int)(((float)rand()/RAND_MAX) * (nYRange - 1)); int nZPostion = (int)(((float)rand()/RAND_MAX) * (nZRange - 1));
Рассчитайте изменение потенциала для создания соседей cell.Six новой ячейки проверяется в левом (L), правый (R), Front (F), позади (B), Вверх (T) и снизу (B *). Если соседи новой ячейки являются старой ячейкой как L на рисунке, изменение потенциала равно PA2A, иначе, если это не старая ячейка, а решение, как R, F, B, T и B * в цифра, это PA2S. Создание новой ячейки изменяет потенциал с помощью PCREATE. Таким образом, изменение потенциала
fPotential = PCREATE + P(Left) + p(Right) + p(Front) + p(Behind) + p(Top) + p(Bottom);
Используйте случайное число, чтобы сравнить изменение потенциала следующим образом. Если случайное число больше экспоненты изменения потенциала, то создайте новую ячейку, иначе отмените.
Теоретически, сфера будет расти вокруг семени. Однако в моем эксперименте форма кластера нерегулярна. Прилагаемое изображение представляет собой кластер из 50000 ячеек. Может ли кто-нибудь дать мне несколько комментариев. Связано ли это с генерацией случайного числа? Благодарю.
Это может быть глупый вопрос, но почему вы думаете, что форма, которую вы опубликовали, «нерегулярна»? Кажется, что центр вашей колонии клеток составляет 260 260 60, а колония клеток примерно распространяется примерно на 230..290 в направлении x/y/z. Это в значительной степени сфера? –
Вы правы. Диапазон кластера выглядит правильно. Но форма огибающей кластера не является кругом. Вы можете видеть из плоскости xy и xz кластера. Поверхность кластера негладкая. Я создал 50000 ячеек. – HXGuo
У вас есть причина не использовать многомерный массив? например 'А [х] [у] [г]'. Это улучшит читаемость вашего кода и уменьшит вероятность ошибок с нашими индексами. – Richard