Алгоритм свай частиц

Я создаю игру, в которой есть около 3000 частиц, которые попадают в кучу. Частицы представляют собой пиксель, и я просто использую boolean [] [] для установки и проверки того, какой пиксель ясен. Сейчас я использую этот код

if (!isFalling(m)) { if (isClear(getX() + 1, getY()) && isClear(getX() + 1, getY() - 1)) setX(getX() + 1); else if (isClear(getX() - 1, getY()) && isClear(getX() - 1, getY() - 1) setX(getX() - 1); } 

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

Решение: я нашел хорошую статью здесь

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

    Взгляните на это для стартера:

    http://www.daniweb.com/software-development/java/threads/426676/sand-game-problem-with-graphics

    Когда Googling, попробуйте «генератор частиц» или «излучатель частиц».

    Также см. Этот вопрос:

    Как эти java песочные игры отслеживают так много частиц?

    Главное, что вам не хватает, это добавить случайность, некоторую энтропию, в вашу систему.

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

    У вас есть это в цикле? Если это так, вы можете рассматривать частицы с «снизу вверх», тогда как движение скольжения может иметь место в любой точке сваи. Вы можете попробовать перетасовать список частиц до выполнения цикла или повторно выбрать случайные элементы из списка, пока не получите низкий уровень оседания.

    В случае 2D-массива вы можете попробовать выполнить цикл из разных направлений или найти другие способы его смешивания – повторное выбор пикселей в случайном порядке может быть неправильным выбором. Моделируется отжиг.

    Или, вы можете добавить случайную проверку на скользящее состояние. Частицы должны быть полустабильными в своих исходных положениях, поэтому, возможно, существует только 50% -ный шанс их скольжения вниз.

    Надеюсь это поможет!